nginx+lua+GraphicsMagick生成实时缩略图-CentOS7

背景

大多数的系统都会涉及缩略图的处理,比如新闻系统和电商系统,特别是电商系统,每个商品大图都会对应一系列尺寸的缩略图用于不同业务场景的使用。部分系统也会生成不同尺寸的缩略图以供PC、手机端、ipad端使用。

解决方案探索:

  1. 直接加载原图,使用css样式表来控制图片的宽高。显然不太合适,大家也尽量不要这样做。
  2. web程序在上传成功后,同时生成相应缩略图。这种做法效率较低,如果遇到批量导入的业务时严重影响性能。并且同步生成缩略图会占用一定量的存储空间,如果能按需生成岂不更好?
  3. 使用七牛阿里云提供的云存储及数据处理服务,解决图片的处理、存储、多节点访问速度的问题,这种方式优点是方案成熟,相应的有一定费用和开发工作,另外有一些小概率的风险,比如云服务挂掉影响本站访问。
  4. 使用第三方的图片处理程序,比如zimg,点击查看使用手册@招牌疯子开发。zimg的性能和扩展性不错,文档也很完善,会继续保持关注。


本文使用的是Nginx+Lua+GraphicsMagick实现缩略图功能,图片的上传及删除还是交由web服务处理,缩略图由单独的模块去完成。最终效果类似淘宝图片,实现自定义图片尺寸功能,可根据图片加后缀100x100.jpg(固定高宽),-100.jpg(定高),_100-.jpg(定宽)形式实现自定义输出图片大小。

说明

文件夹规划

img.xxx.com(如/usr/local/filebase)
├─upload
│  └─img
│    ├─001.jpg
│    └─002.jpg

自定义尺寸后的路径

thumb(/tmp/thumb,可在conf文件里面更改)
├─upload
│  └─img
│    ├─001.jpg_100x100.jpg #固定高和宽
│    ├─001.jpg_-100.jpg #定高
│    ├─001.jpg_200-.jpg #定宽
│    └─002.jpg_300x300.jpg #固定高和宽
  • 其中img.xxx.com为图片站点根目录,img目录是原图目录
  • 缩略图目录根据保持原有结构,并单独设置目录,可定时清理。

链接地址对应关系
原图访问地址:http://img.xxx.com/upload/img/001.jpg
缩略图访问地址:http://img.xxx.com/upload/img/001.jpg_100x100.jpg 即为宽100,高100
自动宽地址: http://img.xxx.com/upload/img/001.jpg_-100.jpg 用"-"表示自动,即为高100,宽自动
自动高地址: http://img.xxx.com/upload/img/001.jpg_200-.jpg 用"-"表示自动,即为宽200,高自动

访问流程

  • 首先判断缩略图是否存在,如存在则直接显示缩略图;
  • 缩略图不存在,则判断原图是否存在,如原图存在则拼接graphicsmagick(gm)命令,生成并显示缩略图,否则返回404

原文地址:http://blog.51cto.com/zhaobotao/2070159

时间: 2024-11-05 21:39:04

nginx+lua+GraphicsMagick生成实时缩略图-CentOS7的相关文章

nginx+lua_nginx+GraphicsMagick生成实时缩略图

暂做笔记,带后续验证通过后,再补充 1.2.3 步. 一.安装 lua 二.安装 GraphicsMagick 三.安装nginx 四.配置 nginx nginx.conf http { lua_package_path '/usr/local/openresty/nginx/lua/?.lua;;'; server { listen 80; server_name img.rhythmk.org; root /home/wwwroot/static/image; #对类似_100x100.g

使用nginx+lua+GraphicsMagick实现图片自动 裁剪

在做网站尤其是以内容为主的过程中,常常会遇到一张图片各种地方都要引用,且每个引用的地方要求的图片尺寸都不一样的.一般中大型的网站都会对这一类的图片做自动裁剪功能.本文介绍在centos6操作系统上,采用nginx.lua和GraphicsMagick工具简单实现图片的自动裁剪功能.其中nginx负责展示图片和调度lua脚本,GraphicsMagick负责对原图进行裁剪. 一.基础软件包安装groupadd wwwuseradd -g www www -s /bin/falseyum -y in

OpenResty+lua+GraphicsMagick生成缩略图

1.安装GraphicsMagick 下载地址:http://www.graphicsmagick.org/ tar zxvf GraphicsMagick-1.3.20.tar.gz cd GraphicsMagick-1.3.20./configure make make install 安装依赖包Ghostscript,不安装的话加水印会找不到字体 yum install -y ghostscript 2.配置nginx.conf location /down/PersonImg { se

OpenResty(Nginx)+Lua+GraphicsMagick实现缩略图功能

http://www.hopesoft.org/blog/?p=1188 2.用法 原始图片是input.jpg,尺寸:160×120 1)只缩小不放大 1 gm convert input.jpg -resize "500x500>" output_1.jpg 加了>,表示只有当图片的宽与高,大于给定的宽与高时,才进行“缩小”操作.生成的图片大小是:160×120,未进行操作如果不加>,会导致图片被比等放大. 2)等比缩图 (缺点:产生白边) 1 gm conver

nginx+lua访问流量实时上报kafka

在nginx这一层,接收到访问请求的时候,就把请求的流量上报发送给kafka storm才能去消费kafka中的实时的访问日志,然后去进行缓存热数据的统计 从lua脚本直接创建一个kafka producer,发送数据到kafka wget https://github.com/doujiang24/lua-resty-kafka/archive/master.zip yum install -y unzip unzip lua-resty-kafka-master.zip cp -rf /us

ftp+nginx+lua_Nginx+GraphicsMagick来实现目录浏览、实时缩略图

一.FTP服务器安装配置 1.rpm -ivh vsftpd-2.2.2-11.el6_4.1.i686.rpm 2.service vsftpd start 3.chkconfig vsftpd on 4.配置 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak vim /etc/vsftpd/vsftpd.conf 12 anonymous_enable=NO 禁止匿名访问...121 chroot_local_user=yes 禁锢

nginx+lua_nginx+GraphicsMagick缩略图+tfs获取原图+ngx_cache_purge

环境介绍 [email protected]:~# uname -aLinux ubuntu-1.230 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux[email protected]:~# cat /etc/issueUbuntu 12.04.1 LTS \n \l [email protected]:~# PS:以下操作我只在如上系统操作,仅供参考 1.安

使用Nginx+Lua(OpenResty)开发高性能Web应用

在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高:如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀:目前Nginx团队也开始意识到这个问题,开发了nginxScript:可以在Nginx中使用JavaScript进行动态配置一些变量和动态脚本执行:而目前市面上

Nginx+Lua(OpenResty)开发高性能Web应用

使用Nginx+Lua(OpenResty)开发高性能Web应用 博客分类: 跟我学Nginx+Lua开发 架构 ngx_luaopenresty 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高:如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀:目前Ngin