使用GD重新处理图像上传


Image upload reprocess with GD

我听说处理上传图像的最佳方法是使用GD库对其进行"重新处理"并保存处理后的图像。请参阅:PHP图像上传安全检查列表

我的问题是如何在GD中进行"重新处理"?这到底意味着什么?我对GD图书馆不是很了解,我担心我会把它搞砸。。。

所以,如果以前做过这件事的人,你能给我举个例子吗?

(我知道,另一个选择是使用ImageMagick。对于ImageMagick,我在这里找到了答案:使用PHP从JPG中删除EXIF数据,但我现在不能使用ImgMagick。顺便说一句。删除EXIF的数据意味着在这种情况下完全重新创建图像?)
(如果有人感兴趣,我会使用Zend Framework。)

如果用户上传了一个JPEG文件,您可以执行以下操作来重新处理它:

$newIm = @imagecreatefromjpeg($_FILES['file']['tmp_name']);
if (!$newIm) {
    // gd could not create an image from the source
    // most likely, the file was not a valid jpeg image
}

然后,您可以使用imagedestroy()丢弃$newIm图像,并使用用户上传的文件,或者保存GD中的图像并使用它。保存GD图像可能会出现一些问题,因为它不是原始图像。

另一个简单的方法是检查图像文件的头(前几个字节),以确保它是正确的;例如,所有JPEG文件都以CCD_ 4开头。

另请参阅imagecreatefromstring(),您也可以使用getimagesize()对上传的图像运行类似的检查。

function isvalidjpeg($file) 
{ 
$finfo = finfo_open(FILEINFO_MIME_TYPE);
return is_resource($finfo) && 
       (finfo_file($finfo, $file) === 'image/jpeg') && 
       finfo_close($finfo);
}
if(isvalidjpeg($_FILES['file']['tmp_name'])) {
   $newIm = @imagecreatefromjpeg($_FILES['file']['tmp_name']); .....