Imagesetpixel - 更改像素值

时间:2014-10-12 15:42:29

标签: php

我必须创建一个读取图像的脚本,并对其进行编码,更改每个通道的像素值...

所以我打开源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);

1 个答案:

答案 0 :(得分:1)

如Paul所述,jpg算法将始终修改某些像素,即使是100%的质量属性。

要获得100%的像素精度,您必须使用lossless image format,例如PNG或TIFF。使用GD or Imagick时,无法使用无损格式。

  

用l'L'l评论编辑:PNG应该是合适的,并且得到支持   由GD库