Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-新Imagick更改图像的md5()_Php_Image_Hash_Imagick - Fatal编程技术网

PHP-新Imagick更改图像的md5()

PHP-新Imagick更改图像的md5(),php,image,hash,imagick,Php,Image,Hash,Imagick,我正在开发一个图像上传程序,它需要检查图像的md5以防止上传重复的图像。 上传图像时,我使用上传的路径创建一个新的Imagick,并获取图像的内容。调用md5()并传递图像内容将从PHP的md5_文件返回一个不同的值,并从命令行返回md5sum。 md5存储在数据库中的design image对象上,因为我需要将上载图像的md5与现有图像进行比较。问题在于每次上传相同的图像时,对新的Imagick内容调用md5都会返回不同的值 $sUploadedImage = '/home/user/test

我正在开发一个图像上传程序,它需要检查图像的md5以防止上传重复的图像。 上传图像时,我使用上传的路径创建一个新的Imagick,并获取图像的内容。调用md5()并传递图像内容将从PHP的md5_文件返回一个不同的值,并从命令行返回md5sum。 md5存储在数据库中的design image对象上,因为我需要将上载图像的md5与现有图像进行比较。问题在于每次上传相同的图像时,对新的Imagick内容调用md5都会返回不同的值

$sUploadedImage = '/home/user/test-12x14.png';

md5(file_get_contents($sUploadedImage));
returns  2352513cde38cfb678cf46b6421f2f8b

md5_file($sUploadedImage);
returns  2352513cde38cfb678cf46b6421f2f8b

// md5sum on Linux 
md5sum /home/user/test-12x14.png 
returns 2352513cde38cfb678cf46b6421f2f8b 

$oImagick = new Imagick($sUploadedImage);
md5($oImagick->getImageBlob());
returns 0a8acb080aedf6245b56d39fb705705f
//returns different value on everytime same image is uploaded

$sNewPath = sfConfig::get('sf_root_dir') . '/design-images/' .$sMd5 .'.png';
$oNewImage->writeFileWithFormat($sNewPath, 'png');

md5(file_get_contents($sNewPath));
returns  2352513cde38cfb678cf46b6421f2f8b

md5_file($sNewPath);
returns  2352513cde38cfb678cf46b6421f2f8b
为什么Imagick上的md5()结果不同?
提前感谢。

问题是PNG文件和其他一些格式在文件中包含创建日期和时间,并且该日期将有所不同ImageMagick具有只检查图像数据本身的内置函数,而不是检查整个文件(包括元数据)的
md5sum

在这里的命令行中,我创建了两个渐变完全相同的图像:

convert -size 256x256 gradient:red-yellow a.png
convert -size 256x256 gradient:red-yellow b.png
现在用
md5sum
检查它们,它们有所不同:

md5 [ab].png
MD5 (a.png) = fbd2be1c89edad043b1d128aaf32a042
MD5 (b.png) = ab08909a80d347d573f5f0f68b2b342e
但只检查图像数据而不检查元数据,它们是相同的:

identify -format "%#\n" [ab].png
47d48b4144f35ca431e7db577a2b6284ef90649c30ffe9c0b9234aa282297c61
47d48b4144f35ca431e7db577a2b6284ef90649c30ffe9c0b9234aa282297c61
在PHP中,您可能需要
Imagick::getImageSignature(void)