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

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

有帮助吗?

解决方案

根据您的安装/服务器安装,你有几种可能性。

我会说,我已经相当从来没有见过一个服务器没有GD安装--为Imagick,它不太可能安装了默认:-(


另一个解决方案可能会被呼叫的 转换 命令行程序 (它与ImageMagick--独立地的任何PHP extension), 使用的东西喜欢 exec 称呼它。

优势,这将是的,你不会是有限的 memory_limit, ,作为调整将由一个外部工具--但是,当然,这还意味着,您的申请将依赖于外部工具,这是不是总是很高兴...


如果有必要,有大量的教程有关GD;例如,那些可能感兴趣:

  • 如何创建缩略PHP和gd :它使用一批处理过程生成的缩略多的图像--这可能是有用的,如果你有产生缩略用于所有图像你已经有了
  • 缩略产生PHP教程 :没有的一些东西不是经常看到,像建立广场的缩略,通过中心的原图像和加入一些背景的颜色。

其他提示

您可以使用 GD模块 或者 ImageMagick模块 调整和缩小任何上传的图像。

如果你用谷歌搜索“PHP image resizer”之类的东西,你会发现很多例子。我倾向于使用 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,因为它产生更干净外观的图像。我的意思是它不会看起来颗粒感和/或pixely。

链接到该函数的PHP手册: HTTP:// US2。 php.net/manual/en/function.imagecopyresampled.php

我会建议的timthumb.php脚本。它是坚如磐石。 http://www.darrenhoyt.com/2008/04 / 02 / timthumb-PHP脚本发布/

如果您已经安装在你的PHP安装Imagick。再有就是做了这样的功能。 Imagick :: thumbnailImage()

如果你没有Imagick,然后GD库会派上用场。因为它们具有 imagcopyresized()

是不是谷歌AppEngine上安装有PIL的一个子集?还有就是“调整大小”功能,可能是用...和最重要的是,你得到一个免费名额!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top