我正在處理一個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