4
我正在處理圖像上傳器,需要檢查圖像的md5以防止上傳重複圖像。 上傳圖片時,我使用上傳的路徑創建一個新的Imagick並獲取圖片的內容。調用md5()並傳遞圖像內容將從PHP的md5_file和命令行中的md5sum返回不同的值。 md5存儲在數據庫中的設計圖像對象上,因爲我需要將上傳圖像的md5與現有圖像進行比較。問題是在新的Imagick內容上調用md5會在每次上傳相同的圖像時返回不同的值。PHP - 新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()結果不同? 在此先感謝。
[它的不同之處在於圖像blob是文件的字符串表示,而不是文件。](http://php.net/manual/en/imagick.getimageblob.php) – castis