// 如同把图片写到文件再读取一样,得到真彩图,与上面一样,如果不这样处理后续的透明图合并将会有异常
$_image = imagecreatetruecolor($src_w, $src_h); //创建真彩图
$color = imagecolorallocate($_image, 255, 255, 255); //分配颜色
imagefill($_image, 0, 0, $color); //填充
imagecopyresampled($_image, $image, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h); //合并修改后的图片
$image = $_image;
//添加背景
$color_index = imagecolorat($image, 435, 300); //获取颜色索引值(背景颜色)
imagefilltoborder($image, 0, 0, $color_index, imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)));
imagesavealpha($image, true); //保存 alpha 通道信息,如果图片中有透明内容则需要
header('Content-type:image/png');
imagepng($image, null, 9);
imagedestroy($image);
注意: 替换图片颜色时需要取出调色板颜色的索引值函数 imagecolorat 就是取颜色的索引值(想获取哪个颜色给出颜色的任意坐标值即可),由于我测试时图片1304 X 1412 所以代码中坐标值都比较大,还有颜色替换会有锯齿这是因为像素点为矩形造成的当图片有一定大小时不会影响太多美观。
执行结果如下:
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx