0

在使用 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

等等...

尽管图像看起来相似,但我不明白为什么值会发生变化。请帮忙。谢谢

4

2 回答 2

0

JPEG 是一种有损压缩的图像文件格式。这意味着每次保存图像时都会丢失数据。

您看到每个像素的不同颜色值与数据丢失没有什么不同。无需打开和重新保存,只需使用文件系统功能复制 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
于 2012-06-30T22:20:28.783 回答
0

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

imagejpeg($img, 'test100.jpg', 100); 
于 2012-06-30T22:22:31.370 回答