首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改图像的md5()

更改图像的md5()
EN

Stack Overflow用户
提问于 2017-01-17 20:46:07
回答 1查看 1.1K关注 0票数 5

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

代码语言:javascript
复制
$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()结果是不同的?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 20:49:13

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

在命令行中,我创建了两个梯度完全相同的图像:

代码语言:javascript
复制
convert -size 256x256 gradient:red-yellow a.png
convert -size 256x256 gradient:red-yellow b.png

现在用md5sum检查它们,它们是不同的:

代码语言:javascript
复制
md5 [ab].png
MD5 (a.png) = fbd2be1c89edad043b1d128aaf32a042
MD5 (b.png) = ab08909a80d347d573f5f0f68b2b342e

但是只检查图像数据而不是元数据,它们是相同的:

代码语言:javascript
复制
identify -format "%#\n" [ab].png
47d48b4144f35ca431e7db577a2b6284ef90649c30ffe9c0b9234aa282297c61
47d48b4144f35ca431e7db577a2b6284ef90649c30ffe9c0b9234aa282297c61

在PHP中,您可能需要Imagick::getImageSignature(void)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41706665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档