我网站的用户上传用作头像的图像。我已将上传限制大小设置为 2 MB。在大多数地方,我只需要缩略图。但是用户上传的图像分辨率要大得多。我将这些文件存储在我的文件系统上。
如何创建缩略图并存储它们而不是大型文件?
我网站的用户上传用作头像的图像。我已将上传限制大小设置为 2 MB。在大多数地方,我只需要缩略图。但是用户上传的图像分辨率要大得多。我将这些文件存储在我的文件系统上。
如何创建缩略图并存储它们而不是大型文件?
根据您的安装/服务器设置,您有多种可能性。
imagecopyresized
功能Imagick extension
, 和类似它的thumbnailImage
方法。我会说我从来没有见过没有安装 GD 的服务器——对于 Imagick,它不太可能默认安装 :-(
另一种解决方案可能是调用convert命令行实用程序(它与 ImageMagick 一起提供——独立于任何 PHP 扩展),使用类似exec
调用它的方法。
这样做的好处是您不会受到限制memory_limit
,因为调整大小将由外部工具执行 - 但是,当然,这也意味着您的应用程序将依赖外部工具,这并不总是好的...
如有必要,有很多关于 GD 的教程;例如,您可能会感兴趣:
您可以使用GD 模块或ImageMagick 模块来调整和缩小任何上传的图像。
如果你用谷歌搜索“PHP 图像调整器”之类的东西,你会发现很多例子。我倾向于使用 GD,因为我有一些旧代码可以正常工作。假设您在 找到了一个已知的上传 jpeg 图像$srcImgPath
,您可以执行以下操作,在哪里$newWidth
以及$newHeight
是您想要的新图像尺寸:
list($width, $height, $type) = getimagesize($srcImgPath);
$srcImg = imagecreatefromjpeg($srcImgPath);
if ($srcImg === false) return false;
$workImg = imagecreatetruecolor($newWidth,$newHeight);
imagecopyresampled($workImg,$srcImg,0,0,0,0,$newWidth,$newHeight,$width,$height);
imagejpeg($workImg,$newFilename,$quality);
根据需要进行功能化,并确保指定$quality
. 您也可以很容易地抽象出这段代码来处理 gif 和 png。
查看 gd 库,特别是imagecopyresized 函数
快速说明一下,如果您使用 GD 路线,请使用 imagecopyresampled,因为它会生成更清晰的图像。我的意思是它看起来不会像颗粒状和/或像素状。
函数的 PHP 手册链接:http: //us2.php.net/manual/en/function.imagecopyresampled.php
我会推荐 timthumb.php 脚本。它坚如磐石。 http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/
如果您在 PHP 设置中安装了 Imagick。然后有一个函数可以做到这一点。imagick::thumbnailImage()
如果您没有 Imagick,那么 GD 库将派上用场。因为他们有imagcopyresized()
Google AppEngine 不是配备了 PIL 的子集吗?可以使用“调整大小”功能……最重要的是,您将获得免费配额!