gpt4 book ai didi

PHP/GD,如何将圆圈从一个图像复制到另一个图像?

转载 作者:可可西里 更新时间:2023-11-01 13:18:53 25 4
gpt4 key购买 nike

是否有一种相当简单的方法可以将圆形区域从一个图像资源复制到另一个图像资源?类似于 imagecopymerge除了圆形或椭圆形等?
如果可能的话,我想避免必须使用预先创建的图像文件(任何椭圆形都应该是可能的),并且如果涉及透明颜色,他们自然应该不理会图像的其余部分。

我问的原因是,我有几个类允许在图像的“选定区域”内应用图像操作,其工作原理是首先从图像副本中删除该区域,然后将副本覆盖回去原本的。但是,如果您想选择一个矩形,然后在其中取消选择一个圆圈,并且让这些操作只影响剩下的区域怎么办?

最佳答案

你可以试试这个:

  1. 从原始图像开始 - $img
  2. 将该图像复制到 png - $copy
  3. 在圆形/椭圆形中创建所需区域的蒙版 png 图像(上面带有黑色形状的“magicpink”图像,黑色设置为 alpha 透明度的颜色)- $mask
  4. 将 $mask 复制到 $copy 之上,保持 Alpha 透明度
  5. 在 $copy 上更改你需要的内容
  6. 将 $copy 复制回 $img 以保持 Alpha 透明度

// 1. Start with the original image
$img = imagecreatefromjpeg("./original.jpg");
$img_magicpink = imagecolorallocatealpha($img, 255, 0, 255, 127);
//imagecolortransparent($img, $img_magicpink);

// (Get its dimensions for copying)
list($w, $h) = getimagesize("./original.jpg");

// 2. Create the first copy
$copy = imagecreatefromjpeg("./original.jpg");
imagealphablending($copy, true);

$copy_magicpink = imagecolorallocate($copy, 255, 0, 255);
imagecolortransparent($copy, $copy_magicpink);

// 3. Create the mask
$mask = imagecreatetruecolor($w, $h);
imagealphablending($mask, true);

// 3-1. Set the masking colours
$mask_black = imagecolorallocate($mask, 0, 0, 0);
$mask_magicpink = imagecolorallocate($mask, 255, 0, 255);
imagecolortransparent($mask, $mask_black);
imagefill($mask, 0, 0, $mask_magicpink);

// 3-2. Draw the circle for the mask
$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);

// 4. Copy the mask over the top of the copied image, and apply the mask as an alpha layer
imagecopymerge($copy, $mask, 0, 0, 0, 0, $w, $h, 100);


// 5. Do what you need to do to the image area
// My example is turning the original image gray and leaving the masked area as colour
$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;
//for gray mode $r = $g = $b
$color = max(array($r, $g, $b));
$gray_color = imagecolorexact($img, $color, $color, $color);
imagesetpixel($gray, $i, $j, $gray_color);
}
}

// 6. Merge the copy with the origianl - maintaining alpha
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);

关于PHP/GD,如何将圆圈从一个图像复制到另一个图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com