1

我网站的用户上传用作头像的图像。我已将上传限制大小设置为 2 MB。在大多数地方,我只需要缩略图。但是用户上传的图像分辨率要大得多。我将这些文件存储在我的文件系统上。

如何创建缩略图并存储它们而不是大型文件?

4

7 回答 7

3

根据您的安装/服务器设置,您有多种可能性。

我会说我从来没有见过没有安装 GD 的服务器——对于 Imagick,它不太可能默认安装 :-(


另一种解决方案可能是调用convert命令行实用程序(它与 ImageMagick 一起提供——独立于任何 PHP 扩展),使用类似exec调用它的方法。

这样做的好处是您不会受到限制memory_limit,因为调整大小将由外部工具执行 - 但是,当然,这也意味着您的应用程序将依赖外部工具,这并不总是好的...


如有必要,有很多关于 GD 的教程;例如,您可能会感兴趣:

于 2009-09-27T14:39:11.203 回答
3

您可以使用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。

于 2009-09-27T14:48:03.473 回答
1

查看 gd 库,特别是imagecopyresized 函数

于 2009-09-27T14:40:21.380 回答
1

快速说明一下,如果您使用 GD 路线,请使用 imagecopyresampled,因为它会生成更清晰的图像。我的意思是它看起来不会像颗粒状和/或像素状。

函数的 PHP 手册链接:http: //us2.php.net/manual/en/function.imagecopyresampled.php

于 2009-09-28T02:39:36.313 回答
1

我会推荐 timthumb.php 脚本。它坚如磐石。 http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/

于 2009-09-28T02:43:54.393 回答
0

如果您在 PHP 设置中安装了 Imagick。然后有一个函数可以做到这一点。imagick::thumbnailImage()

如果您没有 Imagick,那么 GD 库将派上用场。因为他们有imagcopyresized()

于 2009-09-27T14:37:15.740 回答
0

Google AppEngine 不是配备了 PIL 的子集吗?可以使用“调整大小”功能……最重要的是,您将获得免费配额!

于 2009-09-27T17:19:05.810 回答