nginx实现本地图片生成缩略图

  nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x100xz.jpg这种格式,也是缩略图的应用;接下来在nginx中实现缩略图效果

  首先查看nginx在安装时开启了哪些模块,使用 ./nginx -V 可以查看模块开启情况,更准确的说是将安装nginx时编译阶段执行的 ./configure 命令的原样输出,如果编译的时候添加了 --with-http_image_filter_module 那么表示nginx就能直接支持图片缩略图,另外编译之前要提前安装gd-devel这个库,如果没安装可以使用rpm或者yum在线安装的方式 yum -y install gd-devel 进行安装,安装之后再在原有参数上添加上面的参数编译安装nginx即可开启模块

  假设我们图片的真实路径是在本地/image_data/xxxx.jpg,下面有很多jpg格式的图片,我们希望通过访问/image_data/xxxx_100x100.jpg这样的请求路径可以生成宽为100,高也为100的小图,并且请求的宽和高是可变的,那么这时候需要在nginx模块中拦截该请求并返回转换后的小图,在对应的server {}段中进行配置,配置如下:

        location ~* /image_data/(.*)_(\d+)x(\d+)\.jpg$ {
            root /;
            set $s $1;
            set $w $2;
            set $h $3;
            image_filter resize $w $h;
            image_filter_buffer 10M;
            rewrite ^/image_data/(.*)$ /image_data/$s.jpg break;
        }

  过程就是获取请求参数,然后进行相应缩小,最终重写到对应的文件即可实现;另外上述image_filter_buffer设置图片占用buffer的最大大小,默认为1M,当图片大小大于该配置时,那么就会出现415的错误,所以要修改为合适的大小

  修改完上面配置之后,执行 ./nginx -s reload 即可生效,这时访问图片就可以实现小图了

  需要注意一点,上面宽和高的设置并不是把图片强制转换成指定长和宽的大小,而是有其中一个变量最大等于设置的大小并且按比例缩小,比如设置为100x100,对于1000x600的图片来说,缩小后是宽最大为100,高最大也是100,并且等比例缩小;假设高为100,那么宽为1000/6 = 166.67 > 100不符合要求,假设宽为100,那么高为600/10 = 60 < 100符合要求,所以最终缩小后的图片应该是100x60的,并且保持比例不变形,这个地方要了解

时间: 2024-10-11 15:54:27

nginx实现本地图片生成缩略图的相关文章

nginx利用image_filter动态生成缩略图

原文:http://www.open-open.com/lib/view/open1416193847945.html "我现在是有些图片需要生成缩略图,这个现在加了image_filter这个已经实现了,但我不知道怎么样才能访问我上传的原图" 刚开始觉得也不太好弄,让他用程序区处理,实际上稍微动脑筋分析一下也可以不修改程序实现动态生成缩略图且能够访问原图. 前提是需要定好图片的访问规则. 先来看一下什么是nginx的image filter模块. HttpImageFilterMod

图片生成缩略图

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Drawing; using System.IO; using System.Drawing.Drawing2D; using System.Drawing.Imaging; namespace Common { /// <summary>    

PHP图片生成缩略图

代码: 1 <?php 2 class CImage{ 3 /** 4 * 生成缩略图 5 * @param $srcFile (string) 参数说明:源文件路径 6 * @param $size int 缩略图的大小,默认值150 7 * @param $is_square bool 是否正方形,默认值false 8 * @param $quality int 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大).默认为 IJG 默认的质量值(大约 75). 9 */

提取编辑中的图片生成缩略图

<img id="thumb_img" style="width:100px; height:100px; border:1px #ccc solid; margin-top: 15px" src=""> <input id="img" type="hidden" name="thumb_img" value=""> <span>

php图片的应用-生成带有水印文字的图片-生成带有水印图标的图片-生成缩略图(//为注释内容,不影响文件执行)

<?php ////////////////定义水印文字函数开始////////////////// function watertext($i,$t='版权所有',$s=20,$c='white',$p=9){ $img = imagecreatefromjpeg($i);   //imagecreatefromjpeg - 由文件或 URL 创建一个新图象. $cc = ''; ////////switch循环,循环水印文字的颜色 开始////// switch($c){ case 'whi

C# 生成缩略图 去除图片旋转角度

图片生成缩略图会有旋转角度 /// <summary> /// 测试JRE图片压缩后图片会旋转问题 /// </summary> public void Uploadimg1() { HttpPostedFile hpf = HttpContext.Current.Request.Files[0]; var context = HttpContext.Current; string newurl = context.Server.MapPath("/upload/img/

.net又一个生成缩略图的方法,不变形

生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 1 /// <summary> 2 /// 为图片生成缩略图 by 何问起 3 /// </summary> 4 /// <param name="phyPath">原图片的路径</param> 5 /// <param name="width">缩略图宽</param> 6 ///

.net又一个生成缩略图的方法,不变形,非常好用

生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 1 /// <summary> 2 /// 为图片生成缩略图 by 何问起 3 /// </summary> 4 /// <param name="phyPath">原图片的路径</param> 5 /// <param name="width">缩略图宽</param> 6 ///

Java生成缩略图之Thumbnailator

Thumbnailator 是一个为Java界面更流畅的缩略图生成库.从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量.同时还支持根据一个目录批量生成缩略图. 原图如下:  1.指定大小进行缩放 Java代码   //size(宽度, 高度) /* * 若图片横比200小,高比300小,不变 * 若图片横比200小,高比300大,高缩小到300,图片比例不变 * 若图片横比200大,高比