之前有一个我写的帖子是可以拿到远程地址的图片保存本地的
前段时间搞的很火的朋友圈标签,可以使用下面仅仅三个自定义函数即可合成,具体参数石头已经给大家写出,有需要改进的地方请直接留言!
function image_copy_image($bg_image, $sub_image, $add_x, $add_y, $add_w, $add_h, $out_image) {
if ($sub_image) {
$bg_image_c = imagecreatefromstring(file_get_contents($bg_image));
$sub_image_c = imagecreatefromstring(file_get_contents($sub_image));
imagecopyresampled($bg_image_c, $sub_image_c, $add_x, $add_y, 0, 0, $add_w, $add_h, imagesx($sub_image_c), imagesy($sub_image_c));
//保存到out_image
imagejpeg($bg_image_c, $out_image, 80);
imagedestroy($sub_image_c);
imagedestroy($bg_image_c);
}
}
function create_text($filename, $text, $font, $size, $width_f, $red, $grn, $blu) {
$rot = 0; // 旋转角度
$width = 0; //宽度
$height = 0; //高度
$offset_x = 0; //x偏移
$offset_y = 0; //y偏移
$bounds = array();
$text = autowrap($size, 0, $font, $text, $width_f); // 自动换行处理
// 确定边框高度.
$bounds = ImageTTFBBox($size, $rot, $font, "W");
if ($rot < 0) {
$font_height = abs($bounds[7] - $bounds[1]);
} else if ($rot > 0) {
$font_height = abs($bounds[1] - $bounds[7]);
} else {
$font_height = abs($bounds[7] - $bounds[1]);
}
// 确定边框高度.
$bounds = ImageTTFBBox($size, $rot, $font, $text);
if ($rot < 0) {
$width = abs($bounds[4] - $bounds[0]);
$height = abs($bounds[3] - $bounds[7]);
$offset_y = $font_height;
$offset_x = 0;
} else if ($rot > 0) {
$width = abs($bounds[2] - $bounds[6]);
$height = abs($bounds[1] - $bounds[5]);
$offset_y = abs($bounds[7] - $bounds[5]) + $font_height;
$offset_x = abs($bounds[0] - $bounds[6]);
} else {
$width = abs($bounds[4] - $bounds[6]);
$height = abs($bounds[7] - $bounds[1]);
$offset_y = $font_height;
$offset_x = 0;
}
$bg = imagecreatetruecolor($width + 20, $height + 20); // 创建画布
$color = imagecolorallocatealpha($bg, 0, 0, 0, 127); //拾取一个完全透明的颜色
imagealphablending($bg, false); //关闭混合模式,以便透明颜色能覆盖原画布
imagefill($bg, 0, 0, $color); //填充
imagesavealpha($bg, true); //设置保存PNG时保留透明通道信息
$textImg = imagecolorallocate($bg, $red, $grn, $blu); // 创建白色
ImageTTFText($bg, $size, 0, 10, $size + 10, $textImg, $font, $text);
imagepng($bg, $filename);
}
function autowrap($fontsize, $angle, $fontface, $string, $width) {
$content = "";
// 将字符串拆分成一个个单字 保存到数组 letter 中
preg_match_all("/./u", $string, $arr);
$letter = $arr[0];
foreach($letter as $l) {
$teststr = $content.
" ".$l;
$testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
// 判断拼接后的字符串是否超过预设的宽度
if (($testbox[2] > $width) && ($content !== "")) {
$content. = PHP_EOL;
}
$content. = $l;
}
return $content;
}
















18605917465
客服QQ