/**
* GD 合并图像
* @param string $background_img 背景图
* @param string $code_img 二维码
* @param string $file_name 合并图路径
*/
public function create_code($background_img,$code_img,$file_name){
$background_img = $background_img ? $background_img : 'img/share/default_bg.jpg';
//获取背景图像资源 $background_img_source
$background_img_info = getimagesize($background_img);
$background_img_type = $background_img_info[2];//1 = GIF,2 = JPG,3 = PNG ...
if($background_img_type == 3){
$background_img_source = imagecreatefrompng($background_img);
}elseif ($background_img_type == 2){
$background_img_source = imagecreatefromjpeg($background_img);
}elseif ($background_img_type == 1){
$background_img_source = imagecreatefromgif($background_img);
}else{
$background_img_source = imagecreatefromstring(file_get_contents($background_img));
}
//获取二维码图像资源 $code_img_source
$code_img_info = getimagesize($code_img);
$code_img_type = $code_img_info[2];
if($code_img_type == 3){
$code_img_source = imagecreatefrompng($code_img);
}elseif ($code_img_type == 2){
$code_img_source = imagecreatefromjpeg($code_img);
}elseif ($code_img_type == 1){
$code_img_source = imagecreatefromgif($code_img);
}else{
$code_img_source = imagecreatefromstring(file_get_contents($code_img));
}
// 创建真彩画布
$merge_img = imageCreatetruecolor(imagesx($background_img_source),imagesy($background_img_source));
// 为真彩画布创建白色背景
$color = imagecolorallocate($merge_img, 255, 255, 255);
imagefill($merge_img, 0, 0, $color);
/**
* 复制背景图到真彩画布中(重新取样-获取透明图片)
* @dst_image 目标图像
* @src_image 被拷贝的源图像
* @dst_x 目标图像开始 x 坐标
* @dst_y 目标图像开始 y 坐标,x,y同为 0 则从左上角开始
* @src_x 拷贝图像开始 x 坐标
* @src_y 拷贝图像开始 y 坐标,x,y同为 0 则从左上角开始拷贝
* @dst_w 设定载入的原图的宽度(在此设置缩放)
* @dst_h 设定载入的原图的高度(在此设置缩放)
* @src_w (从 src_x 开始)拷贝的宽度
* @src_h (从 src_y 开始)拷贝的高度
*/
imagecopyresampled($merge_img, $background_img_source, 0, 0, 0, 0, imagesx($background_img_source), imagesy($background_img_source), imagesx($background_img_source), imagesy($background_img_source));
/**
* 合并图像
* @dst_image 目标图像
* @src_image 被拷贝的源图像
* @dst_x 目标图像开始 x 坐标
* @dst_y 目标图像开始 y 坐标,x,y同为 0 则从左上角开始
* @src_x 拷贝图像开始 x 坐标
* @src_y 拷贝图像开始 y 坐标,x,y同为 0 则从左上角开始拷贝
* @dst_w 设定载入的原图的宽度(在此设置缩放)
* @dst_h 设定载入的原图的高度(在此设置缩放)
* @src_w (从 src_x 开始)拷贝的宽度
* @src_h (从 src_y 开始)拷贝的高度
* @pct 图像合并程度,取值 0-100 ,当 pct=0 时,实际上什么也没做,反之完全合并
*/
$dst_x = imagesx($merge_img) - imagesx($code_img_source) - 40;
$dst_y = imagesy($merge_img) - imagesy($code_img_source) - 40;
imagecopymerge($merge_img, $code_img_source, $dst_x, $dst_y, 0, 0, imagesx($code_img_source), imagesy($code_img_source), 100);
// 保存合成图片
imagepng($merge_img,$file_name);
}
PHP-GD 合并图像
最新推荐文章于 2021-03-11 18:31:20 发布