`

灵活自定义缩略图片尺寸大小方案分享(nginx,lua_nginx,GraphicsMagick)

 
阅读更多
melin 写道
    在开发电子商务网站时,同一个图片需要不同尺寸的缩略图片,一般有两种策略生成缩略图,一种在上传图片时,生成需要的缩略图,另一种是请求指定尺寸的图片时生存缩略图片,第一种方式有一定限制,就是需要提前知道所有尺寸的图片,而第二种方式更加灵活,这里采用第二种方案(也是查看taobao网站图片名称,猜想出来的方案,并加以验证,后来证实淘宝也是采用这个方案,只是淘宝使用ImageMagick)。
    这里主要借助lua_nginx module调用GraphicsMagick命令生存生存缩略图片,缩略图片的尺寸包含在请求图片名称中,例如:xxxxx.jpg.80x80.jpg返回的就是xxx.jpg的80x80尺寸的图片大小。nginx配置如下:
   
    上传图片名称使用32位随机字符替换掉,图片存放目录为图片名称前六个字母,每两个一组,构造三层目录结构存放,这样可以均匀存放图片在不同目录。避免目录存放文件数量限制。
    为了避免随意生成不同尺寸的缩略图,这里做了限制,在image_sizes中定义了需要的缩略图尺寸。
        location /testImg/ {
            rewrite_by_lua '
                local image_root = "/home/tomcat/eisp-files";
                function file_notexists(name)
                   local f=io.open(name,"r")
                   if f~=nil then io.close(f) return false else return true end
                end
                
								local uri = ngx.re.sub(ngx.var.uri, "/testImg/([0-9a-zA-Z]+)/([0-9a-zA-Z]{2})([0-9a-zA-Z]{2})([0-9a-zA-Z]{2})([0-9a-zA-Z]+).([0-9a-zA-Z]+)", "/images/$1/$2/$3/$4/$2$3$4$5.$6", "o");
                local index = string.find(uri, "([0-9]+)x([0-9]+)");
                local originalUri = string.sub(uri, 0, index-2);
                local area = string.sub(uri, index);
                index = string.find(area, "([.])");
                area = string.sub(area, 0, index-1);

                if file_notexists(image_root .. uri) then
                   local image_sizes = {"80x80", "800x600", "40x40"};
                   function table.contains(table, element)
                      for _, value in pairs(table) do
                         if value == element then
                            return true
                         end
                      end
                      return false
                   end

                   if table.contains(image_sizes, area) then
                       local command = "gm convert " .. image_root ..  originalUri  .. " -thumbnail " .. area .. " -background gray -gravity center -extent " .. area .. " " .. image_root .. uri;
                       os.execute(command);
                       ngx.req.set_uri(uri, true);
                   else
                       ngx.exit(404);
                   end;
                else
                   ngx.req.set_uri(uri, true);
                end;
            ';
        }

        location /images/ {
            alias /home/tomcat/eisp-files/images/;
            expires 7d;
        }


分享到:
评论

相关推荐

    nginx-lua-GraphicsMagick

    **Nginx-Lua-GraphicsMagick:搭建高效图片处理服务** 在当今互联网时代,图片是网站内容的重要组成部分,无论是社交媒体、电子商务还是个人博客,都需要处理大量的图片。为了提高图片处理效率并减轻服务器负担,...

    Nginx+Lua+GraphicsMagick图片缩略图

    Nginx+Lua+GraphicsMagick实现动态生成指定尺寸的图片

    nginx lua处理图片

    标题 "nginx lua处理图片" 指的是使用Nginx Web服务器与Lua脚本语言结合,来处理图像文件的一种技术方案。Nginx通常作为静态资源服务器,而通过集成Lua,我们可以实现更复杂的动态处理逻辑,例如图片的缩略图生成、...

    缩略图OpenResty(Nginx)+Lua+GraphicsMagick

    OpenResty(Nginx+Lua)结合GraphicsMagick的解决方案,提供了一种强大的方法来实现这个目标。让我们深入探讨这个话题。 首先,OpenResty是一个基于Nginx Web服务器的扩展平台,它集成了LuaJIT,允许开发者用Lua...

    Nginx安装+nginx_upstream_check_module后端健康检查

    ### Nginx安装与后端健康检查模块配置详解 #### 一、Nginx环境搭建与核心组件安装 **1.1 基础环境准备** - **操作系统**: CentOS 6.5 - **基本服务器配置**: 在安装过程中选择了“基本服务器”配置。 **1.2 安装...

    Nginx_Lua-FastDFS-master.zip

    总之,Nginx_Lua-FastDFS的组合提供了一种高效、灵活的文件服务解决方案,尤其在处理大量图片文件和需要动态生成缩略图的场景下,表现出色。通过深入理解这两者的结合,我们可以更好地优化Web服务,提升用户体验。

    nginx-lua-GraphicsMagick:类似的淘宝图片,用Lua脚本实现的自定义图片尺寸,动态生成样式

    GraphicsMagick Nginx + Lua + GraphicsMagick,实现自定义图片尺寸功能,支持两种模式[固定高宽模式,定高或定宽模式],支持FastDFS文件存储github地址: : 说明类似淘宝图片,实现自定义图片尺寸功能,可根据图片...

    添加了http_image_filter_module模块的Nginx

    - 图像尺寸调整:可以设置固定的宽度或高度,自动按比例调整图片大小。 - 裁剪:根据指定的坐标和大小进行裁剪,可用于生成缩略图。 - 旋转:支持常见角度的图像旋转,如90度、180度和270度。 - 质量控制:可以...

    lua-nginx-16

    这通常涉及到在 Nginx 层面直接生成或调整图片大小,以提供快速的缩略图服务,减少后端服务器的负载。这种功能对于高流量的网站或者需要实时处理大量图片的场景尤其有用。 Lua-Nginx 模块的核心特性包括: 1. **非...

    Docker+FastDFS+Nginx+Lua搭建图片服务器,并实现图片缩略图

    Docker+FastDFS+Nginx+Lua实现图片缩略图1、FastDFS安装1.1、镜像下载1.2、开启tracker容器1.3、开启storage容器1.4、测试2、FastDFS集成Nginx+lua2.1、依赖包下载2.2、安装软件基础包2.3、依赖安装2.4、配置Lua脚本...

    ASP 微信分享、朋友圈自定义缩略图内容

    ASP 微信分享、朋友圈自定义缩略图内容。 亲测可以使用。内含实例。

    nginx-lua-GraphicsMagick:动态生成缩略图脚本

    nginx-lua-GraphicsMagick网站中,需要根据需求,动态生成缩略图,网上找了些别人写好的脚本,也在github上找到了一些,自己稍微改写了下,让脚本同时支持00.jpg_80x80.jpg和00_80x80.jpg的2种格式。具体可以参考...

    php解决微信分享网页不显示缩略图和描述,对接公众号微信分享自定义缩略图和描述

    对接公众号设置自定义微信分享自定义缩略图和描述

    fastdfs+nginx 分布式存储图片,支持动态缩略图

    这个系统既解决了大数据量文件的存储问题,又能快速响应用户对缩略图的需求,是互联网应用中常见的图片服务解决方案。在具体实施过程中,需要根据业务需求调整配置参数,优化性能,确保系统的稳定运行。

    php自定义宽高缩略图片

    在PHP中,生成自定义宽高缩略图片是一项常见的任务,尤其在网站开发中,用于显示用户上传的图片或者优化页面加载速度。... 首先,我们需要了解基本...通过这个过程,你可以灵活地调整图片大小,以适应不同的应用场景。

    Nginx服务器中用于生成缩略图的模块配置教程

    ngx_image_thumb是nginx中用来生成缩略图的模块,生存缩略图的方法很多,本nginx模块主要功能是对请求的图片进行缩略/水印处理,支持文字水印和图片水印。支持自定义字体,文字大小,水印透明度,水印位置,判断原图...

    C# 自定义缩略图控件

    在本案例中,我们讨论的是"C#自定义缩略图控件",这是一款专为展示图片缩略图而设计的自定义用户界面元素。这个控件能够接收一个图片数组,并根据指定的显示大小在界面上呈现这些图片。 创建自定义控件是C#编程中的...

    openresty + lua-resty-weedfs + graphicsmagick小文件部署方案

    将图片的上传,分布式管理 交由seaweedfs管理,可提供更快的响应速度,更方便,无痛的分布式扩展节点,billion 级别的。后面使用openresty + lua-resty-weedfs + graphicsmagick 生成缩略图功能独立处理。

    nginx作为http图片服务器示例

    Nginx是一款轻量级的Web服务器,以其高效的并发处理能力、低内存占用以及简单易用的配置而闻名,尤其适合处理静态内容如图片、CSS和JavaScript等。 在描述中提到,“超级性能”是Nginx的一大特点。Nginx采用事件...

    wordpress缩略图thumbnail尺寸控制.pdf

    总结来说,WordPress提供灵活的缩略图尺寸控制,允许用户和开发者根据实际需求自定义缩略图的大小和裁剪方式。通过后台设置、`set_post_thumbnail_size()`和`add_image_size()`函数,可以轻松调整和扩展缩略图的尺寸...

Global site tag (gtag.js) - Google Analytics