我正在处理一个PHP项目,我正在操纵图像像素。我可以做到这一点,但我不想改变每个像素。我只打算改变大约一半的像素,并且只是略微(rgb颜色的红色±10或更少)。我遇到的问题是在图像被处理并导出到.jpg文件后,我注意到颜色变化混合在一起。也就是说,当我改变像素的颜色时,它也会稍微改变附近像素的颜色。PHP不断变化的图像像素颜色也改变附近的像素
这不是我想要的行为,因为一半的像素不应该看到任何颜色变化。有什么办法可以解决这个问题吗?
更多信息:
我正在操纵JPEG图像。
我使用imagecolorallocate()和imagesetpixel()来更改每个单独的像素适当的数量。我注意到,如果我在将图像导出到文件之前检查图像资源的每个像素,则所有内容都完全相同。只有我打算改变的像素具有与之前不同的值,并且没有像素的“混合”。
但是,在我更改后的图像资源上调用imagejpeg()之后,会出现颜色的“混合”。这是我非常想避免的,因为它破坏了我调整某些像素的颜色而不是其他的目的。
的是我如何我改变每个像素
for ($x = 0; $x < strlen($msglenBin); $x++){
colorAdjust($img,$x,0,$msglenBin[$x]);
var_dump(imagecolorat($img, $x, 0),imagecolorsforindex($img, imagecolorat($img, $x, 0)));
}
的colorAdjust功能:
function colorAdjust($img,$x,$y,$value){
if ($value == '1'){
$rgb = imagecolorat($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$r = $r - 15;
if ($r >=255){
$r=245;
}
$to=imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img,$x,$y,$to);
}else{
}
}
这是怎么了其导出到文件:
imagejpeg($newImage,"images/encryptedimage.jpg",150)
重申我的问题。我的项目要求图像中只有一些像素的颜色发生变化,而且只是略微变化。所有其他像素不应该看到任何颜色变化。但是,当我改变像素的颜色时,会发生“混合”,改变附近像素的颜色。这无意中导致一些像素应保持100%相同的颜色改变。
在此先感谢。
感谢您的回复。我会阅读关于JPEG文件。我真的只是用它,因为那是躺在周围的方便图像,并没有考虑它的三倍。我会尝试一切与PNG图像,看看问题是否解决自己。将质量改为100并不能解决问题。 – Zaaptastic
使用PNG图像确实解决了问题。谢谢! – Zaaptastic