您可以尝试以下操作:
- 从原始图像开始 - $img
- 将该图像复制到png格式中 - $copy
- 创建一个遮罩png图像,以圆形/椭圆形为区域(一个黑色形状的“magicpink”图像,其中黑色设置为alpha透明度颜色)- $mask
- 在保持Alpha透明度的情况下,将$mask复制到$copy上方
- 更改$copy上需要修改的内容
- 在保持Alpha透明度的情况下,将$copy再次复制回$img上
$img = imagecreatefromjpeg("./original.jpg");
$img_magicpink = imagecolorallocatealpha($img, 255, 0, 255, 127);
list($w, $h) = getimagesize("./original.jpg");
$copy = imagecreatefromjpeg("./original.jpg");
imagealphablending($copy, true);
$copy_magicpink = imagecolorallocate($copy, 255, 0, 255);
imagecolortransparent($copy, $copy_magicpink);
$mask = imagecreatetruecolor($w, $h);
imagealphablending($mask, true);
$mask_black = imagecolorallocate($mask, 0, 0, 0);
$mask_magicpink = imagecolorallocate($mask, 255, 0, 255);
imagecolortransparent($mask, $mask_black);
imagefill($mask, 0, 0, $mask_magicpink);
$circle_x = $w/2;
$circle_y = $h/2;
$circle_w = 150;
$circle_h = 150;
imagefilledellipse($mask, $circle_x, $circle_y, $circle_w, $circle_h, $mask_black);
imagecopymerge($copy, $mask, 0, 0, 0, 0, $w, $h, 100);
$x = imagesx($img);
$y = imagesy($img);
$gray = imagecreatetruecolor($x, $y);
imagecolorallocate($gray, 0, 0, 0);
for ($i = 0; $i > 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$color = max(array($r, $g, $b));
$gray_color = imagecolorexact($img, $color, $color, $color);
imagesetpixel($gray, $i, $j, $gray_color);
}
}
imagecopymergegray($gray, $copy, 0, 0, 0, 0, $w, $h, 100);
imagealphablending($gray, true);
imagecolortransparent($gray, $mask_magicpink);
header('Content-Type: image/png');
imagepng($gray);
imagedestroy($gray);