我必须创建一个读取图像的脚本,并对其进行编码,更改每个通道的像素值...
所以我打开源JPEG图像,然后将每个像素写入另一个图像句柄。
编码我这样做:
$rgb = imagecolorat($img, $x, $y);
$colors = imagecolorsforindex($img, $rgb);
$rosso = cripta($colors['red'], 100);
$verde = cripta($colors['green'], 100);
$blu = cripta($colors['blue'], 100);
这里" cripta"功能:
function cripta($valore, $step)
{
$delta = $valore + $step;
if($delta > 255)
{
$num = $delta - 256;
return $num;
}
else
{
return $delta;
}
}
直到这里一切都好......
这里的反向功能:
function decripta($valore, $step)
{
$delta = $valore - $step;
if($delta < 0)
{
$calc = 255 + $delta + 1;
}
else
{
$calc = $delta;
}
return $calc;
}
当我使用相同的方法解码创建的图像但使用&#34; decripta&#34;功能,一些像素疯了!
这里有一些例子:
来源: http://i61.tinypic.com/2m43ww1.jpg
解码图片: http://i60.tinypic.com/wkfngz.jpg
有人能帮助我吗?
我有这个问题只有保存编码图像,然后打开它解码... 如果我使用手柄而不保存,解码部分是正确的! 那么为什么当我保存图像时,一些像素会改变这个值?我保存使用:
imagejpeg($handle, $filename, 100);
答案 0 :(得分:1)
如Paul所述,jpg算法将始终修改某些像素,即使是100%的质量属性。
要获得100%的像素精度,您必须使用lossless image format,例如PNG或TIFF。使用GD or Imagick时,无法使用无损格式。
用l'L'l评论编辑:PNG应该是合适的,并且得到支持 由GD库