第一个问题,请保持柔和;-)
我编写了一个图像类,该类使简单的事情(矩形,文本)更加容易,基本上是一堆用于PHP图像函数的包装器方法.
我现在想做的是允许用户定义一个选择,并使以下图像操作仅影响所选区域.我想我可以通过将图像复制到imgTwo并从中删除所选区域来进行此操作,像往常一样在原始图像上执行以下图像操作,然后在调用$img-> deselect()时,将imgTwo复制回原件,然后销毁副本.
>这是最好的方法吗?显然,在选定区域内定义取消选定的区域会很棘手,但我现在可以接受它:)
然后,我要从副本中删除选择的方法是通过绘制透明颜色的矩形来解决问题,但是这种方法是可行的-但我无法弄清楚如何选择该颜色,同时还要确保其余颜色不会出现图片.此应用程序中的输入图像是真彩色PNG,因此没有带有颜色索引的调色板(我认为吗?).
>必须有一种更好的方法,而不是收集每个像素的颜色,然后找到一种不在$existing_colours数组中出现的颜色.
解决方法:
PNG透明与GIF透明的工作原理不同-您无需将特定颜色定义为透明.
只需使用imagecolorallocatealpha()
并确保将imagealphablending()
设置为false:
// "0, 0, 0" can be anything; 127 = completely transparent
$c = imagecolorallocatealpha($img, 0, 0, 0, 127);
// Set this to be false to overwrite the rectangle instead of drawing on top of it
imagealphablending($img, false);
imagefilledrectangle($img, $x, $y, $width - 1, $height - 1, $c);