PHP GD 扩展提供了图像处理的接口,本文为大家介绍一款非常小巧易用的缩略图库,支持多种缩放方式、多种输出格式、自带缓存配置……
0x00 源码
首先当然是放源码:
原作者代码因为多年没有维护,我进行了大量调整和优化,暂时就不合并了。
0x01 使用
使用方法非常简单,将thumb.php
复制到 Web 服务器目录下,打开此文件。文件头部提供一些可供修改的参数,包括缓存目录等。
我们在此目录下创建cache
文件夹,并确保 PHP 拥有rw
权限。
接下来,随便找一张图片放在此目录下,接着使用 Postman 访问:
http://<YOUR_HOST>/thumb.php?src=<IMG_SRC>&size=<Width>x<Height>
例如:
http://localhost/thumb.php?src=test.png&size=100x200
使用 Postman 是为避免客户端缓存生效。
可以发现已经成功输出缩略图,且在cache
文件夹下有一条缓存文件产生。当下一次进行请求时,Thumb
会自动检测客户端缓存,若存在则返回HTPP Status 304
,若不存在则检测服务端缩略图缓存(cache
文件夹),若已存在对应图片、缩略图参数的缓存,则直接返回缓存,不重新进行图片处理。
0x02 拓展
关于更多缩略图的参数,可参考 README 文档说明。
另外,此库单文件且内部集成缓存的方式的确让缩略图变得简单易用,但同样存在一些问题:无论图片是否已被缓存,所有的缩略图请求都会进入到 PHP 代码内进行处理,无疑会增加不必要的资源消耗。
对于请求访问量比较大的站点,还是能在 Web 服务器处理掉的请求,就直接处理掉比较好,尤其像这类静态文件,绝对是 Nginx 的强项。
你可以将请求 URL 改为图片后缀名结尾(例如:xxx.jpg
),利用 Nginx 的try_files
指令,尝试访问源文件,不存在再走缩略图库。
当然,如今也有 Nginx 直接实现缩略图的模块,GitHub 上搜索关键词:thumb nginx
。不过需要重新编译 Nginx,略显麻烦。
还有一个比较懒的办法——挂 CDN,缓存全部thumb.php
请求。
0x03 感言
条条大路通罗马,众多技术方案面前,实现容易,选择合适的才是难点。