PHP-创建和读取图像会给出不同的值

PHP-创建和读取图像会给出不同的值,php,image-processing,Php,Image Processing,在用PHP处理图像时,我注意到一个奇怪的行为,不知道为什么 我读取一个jpeg图像,然后从中创建一个新图像。然后我读了新的图像。但是,显示颜色值会产生不同的结果。(不过,图像看起来是一样的。) 这是我的密码: $img = imagecreatefromjpeg('test2.jpg'); imagejpeg($img, 'test100.jpg'); $new= imagecreatefromjpeg('test100.jpg'); list($width,$height) = get

在用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>";
    }
}
等等

我不明白为什么这些值会改变,尽管图像看起来很相似。 请帮忙。
谢谢

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

每个像素的颜色值不同,这意味着数据丢失。不用打开并重新保存,只需使用文件系统功能复制jpeg文件即可

$img = imagecreatefromjpeg('test2.jpg');
copy('test2.jpg', 'test100.jpg');          ## <-- copy image _file_
$new= imagecreatefromjpeg('test100.jpg'); 

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

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

谢谢你,哈克雷,但我不能复制这些文件。我的主要动机是使用facebook应用程序通过facebook框架上传图片。然后,根据需要,我需要保存facebook数据库中的文件。好吧,只要你打开并保存,这将永远是不同的。这就是像JPG这样有损图像编码的本质。尝试另存为PNG,至少当您选择最高质量时,文件格式允许无损保存(不知道GD lib是否支持,但为什么不支持?!)。我需要找到JPEG格式的内容,因为facebook会将每张图片转换为jpg,即使我上传为PNG。同样,我得到了不想要的不同值。到目前为止,没有成功。
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
imagejpeg($img, 'test100.jpg', 100);