PHP-创建和图像和阅读它给出了不同的价值观

时间:2012-06-30 01:10:57

标签: php image-processing

在处理PHP中的图像时,我注意到一种奇怪的行为,不确定原因。

我读了一个jpeg图像,然后从中创建一个新图像。然后我读了新图像。但是,显示颜色值会产生不同的结果。 (虽然图像看起来相同。)

这是我的代码:

$img = imagecreatefromjpeg('test2.jpg');
imagejpeg($img, 'test100.jpg'); 
$new= imagecreatefromjpeg('test100.jpg');   
list($width,$height) = getimagesize('test100.jpg'); 

for($x=0; $x<$width; $x++){
    for($y=0; $y<$height; $y++){
        echo "At [$x][$y] --".imagecolorat($img,$x,$y)."--".imagecolorat($new,$x,$y)."<br>";
    }
}

我得到以下输出:

At [0][0] --14732734--14667454
At [0][1] --14601148--14666941
At [0][2] --13810862--13810862
At [0][3] --14271156--14139570
At [0][4] --15717832--15652039
At [0][5] --14598838--14401972
At [0][6] --11440262--11309188

等等......

虽然图像看起来很相似,但我没有理解值变化的原因。 请帮忙。 谢谢

2 个答案:

答案 0 :(得分:0)

JPEG是lossy compression的图像文件格式。这意味着每次保存图像时都会丢失数据。

您看到每个像素的不同颜色值意味着与数据丢失没什么不同。只需使用文件系统函数

复制jpeg文件,而不是打开和重新保存
$img = imagecreatefromjpeg('test2.jpg');
copy('test2.jpg', 'test100.jpg');          ## <-- copy image _file_
$new= imagecreatefromjpeg('test100.jpg'); 
然后,您将获得相同的结果:

At [0][0] --855561--855561
At [0][1] --855561--855561
At [0][2] --921353--921353
At [0][3] --987144--987144
At [0][4] --1052937--1052937
At [0][5] --1250570--1250570
At [0][6] --1579535--1579535

答案 1 :(得分:0)

如果保存时没有指定值,保存到test100.jpg的图像质量默认为75%...使用以下内容保存100%质量。

imagejpeg($img, 'test100.jpg', 100);