说明
1.因为上传的图片较大,部分页面直接引用图片地址,则造成页面加载缓慢问题。
2.考虑到服务器空间问题,我们没有进行上传缩略图。仅仅是上传了原图
3.为了优化页面加载图片的时间问题,所以对图片进行动态缩放。
PS:如果访问量较高,建议进行存储缩略图
图片缩放采用nginx的 http_image_filter_module 详细见:http://nginx.org/en/docs/http/ngx_http_image_filter_module.html
安装准备
- 图片缩放依赖于 gdlib
下载地址: https://libgd.github.io/ https://github.com/libgd/libgd/releases/download/gd-2.2.4/libgd-2.2.4.tar.gz
下载后,进入目录,依次执行
./configure
sudo make
sudo make install
安装nginx module
1.编译
因为nginx 自带该 module,只需要编译nginx启用即可
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre=/soft/pcre-8.35 --add-module=/soft/fastdfs-nginx-module-master/src --with-http_image_filter_module
sudo make ;
sudo make install;
2.修改配置文件
修改 nginx.conf文件
- 说明:image_filter 的resize 中,支持 - 变量。
- 原文提示“proportionally reduces an image to the specified sizes. To reduce by only one dimension, another dimension can be specified as “-”. In case of an error, the server will return code 415 (Unsupported Media Type). Parameter values can contain variables. When used along with the rotate parameter, the rotation happens after reduction.”
location ~/group1/M00/(.*)\.(jpg|jpeg|gif|png) {
root /home/administrator/fastdfs/data;
ngx_fastdfs_module;
set $w "-";
if ($arg_w != "") {
set $w $arg_w;
}
image_filter resize $w $w;
image_filter_buffer 2M;
}
完成
可以访问:http://192.168.31.95/group1/M00/00/00/wKgfX1k_RqiACmScAASQWK7MiFY632.jpg?w=200 即可看到效果啦
可能会遇见的问题
- undefined reference to
gdImageJpegPtr'或 undefined reference to
gdImagePngPtr' 或者 undefined symbol: gdImageCreateFromJpegPtr
需要安装jpeg的库 。安装完毕后,重新编译nginx 。
下载地址:http://web.mit.edu/wwinnie/MacData/afs/athena/system/i386_deb50/os/usr/share/doc/libgd2-noxpm/README.html
- 如果提示“ gd_gd2.c:213:40: error: ‘INT_MAX’ undeclared (first use in this function) if (*ncx <= 0 || *ncy <= 0 || *ncx > INT_MAX / *ncy) {”
网络上找到一个偏方(我不会c): 可以修改文件 src/gd_gd2.c. , 添加 include <limits.h> 然后 sudo make
#include <math.h>
#include <limits.h>
#include <string.h>