nginx+GraphicsMagick实现缩略图、图片实时缩放
2017-09-04 00:00
471 查看
GraphicsMagick
1.介绍
GraphicsMagick号称图像处理领域的瑞士军刀。 短小精悍的代码却提供了一个鲁棒、高效的工具和库集合,来处理图像的读取、写入和操作,支持超过88种图像格式,包括重要的DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF。2.安装
GraphicsMagick有windows的安装包,直接双击运行,下一步下一步即可,Linux平台不做过多赘述,如果不会安装请百度注意:安装成功之后 记得加入环境变量中
3.常用命令
只缩小不放大 ``` gm convert input.jpg -resize "500x500>" output_1.jpg ``` 加了>,表示只有当图片的宽与高,大于给定的宽与高时,才进行“缩小”操作。 生成的图片大小是:160x120,未进行操作 如果不加>,会导致图片被比等放大。 等比缩图 (缺点:产生白边) ``` gm convert input.jpg -thumbnail "100x100" output_1.jpg ``` 生成的图片大小是:100x75 非等比缩图,按给定的参数缩图(缺点:长宽比会变化) ``` gm convert input.jpg -thumbnail "100x100!" output_2.jpg ``` 生成的图片大小是:100x100 裁剪后保证等比缩图 (缺点:裁剪了图片的一部分) ``` gm convert input.jpg -thumbnail "100x100^" -gravity center -extent 100x100 output_3.jpg ``` 生成的图片大小是:100x100,还保证了比例。不过图片经过了裁剪,剪了图片左右两边才达到1:1 填充后保证等比缩图 (缺点:要填充颜色,和第一种方法基本一样) ``` gm convert input.jpg -thumbnail "100x100" -background gray -gravity center -extent 100x100 output_4.jpg ``` 生成的图片大小是:100x100,还保证了比例,同时没有对图片进行任何裁剪,缺失的部分按指定颜色进行填充。 需要的命令就这么多 ,gm还有很多其它强大的功能,如水印,图片格式转换等等,需要深入了解的朋友可自行查看文档
Nginx
1.安装
linux 安装请查看我的文章 http://blog.csdn.net/daerduotutuzi/article/details/510423882.配置
主要介绍的是配置server { listen 6789; server_name img.app; root "D:/phpStudy/WWW/img"; location ~ \.(png|jpg|jpeg|gif)$ { set $thumbnail_root D:/phpStudy/WWW/img/thumbnail; set $file $thumbnail_root$uri; if (-f $file) { rewrite ^/(.*)$ /thumbnail/$1 last; } #如果文件不存在,则rewrite到产生图片的脚本文件autoimg.php if (!-f $request_filename) { rewrite ^/.*$ /autoimg.php; expires max; } #如果文件存在,则设置过期时间,关闭访问日志 if ( -f $request_filename ) { expires max; access_log off; } } location / { index index.html index.htm index.php; #autoindex on; } location ~ autoimg.php$ {#安全性考虑,文件服务器,只这个脚本文件的范围提交给php处理 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }
需要用到的PHP文件(当然其它语言也是可以的,无非就是获取了url参数,执行了一段系统命令)
<?php $file = $_SERVER ['REQUEST_URI'];//请求字串 /abc.jpg.w320.jpg $srcFile = $_SERVER ['DOCUMENT_ROOT'] .$file; $desfile = $_SERVER ['DOCUMENT_ROOT'] . '/thumbnail'.$file; //目标目标路径 $dirname = dirname ( $srcFile ) . "/"; $filename = basename ( $desfile ); if (preg_match ( "/([^\.]+\.(png|jpg|jpeg|gif))\.w([\d]+)\.(jpg)/i", $filename, $m )) { $srcfile = $dirname . $m [1]; $width = $m [3]; //匹配出输出文件宽度 createThumbnail ( $srcfile, $desfile, $width ); } function createThumbnail($src,$des,$width){ $dir = dirname($des); if(!is_dir($dir)){ makeDir($dir); } $imageinfos = getimagesize ( $src ); $height = intval($width / $imageinfos[0] * $imageinfos[1]); $wh = $width.'x'.$height; $str = "D:\GraphicsMagick-1.3.24-Q8\gm.exe convert " .$src. " -thumbnail ".$wh." -background gray -gravity center -extent ".$wh." ".$des.' 2>&1'; exec($str,$out,$status); if($status == 0){ header('Content-type: image/jpg'); $data = file_get_contents($des); echo $data; } } function makeDir($path){ if(is_dir($path)){//已经是目录了就不用创建 return true; } if(is_dir(dirname($path))){//父目录已经存在,直接创建 return mkdir($path); } makedir(dirname($path));//创建各级父目录 return mkdir($path);//因为有父目录,所以可以创建路径 } 原图放入网站目录中 访问 http://img.app/abc.jpg.w320.jpg 就可以看到thumbnail生成了一个宽度为320px的缩略图文件,而浏览器中的图片大小确实为320px
相关文章推荐
- nginx+GraphicsMagick实现缩略图、图片实时缩放
- ftp+nginx+lua_Nginx+GraphicsMagick来实现目录浏览、实时缩略图
- Nginx+lua_Nginx+GraphicsMagick来实现实时缩略图(已验证)
- Tengine + Lua + GraphicsMagick 实现图片自动裁剪/缩放
- Tengine + Lua + GraphicsMagick 实现图片自动裁剪/缩放 - 腾勇的个人页面 - 开源中国社区
- php实现按指定大小等比缩放生成上传图片缩略图的方法
- Nginx + image_filter_module + fastdfs实现上传图片的实时缩略图预览
- C#实现图片缩放(包括缩略图和旋转)
- nginx+lua_nginx+GraphicsMagick生成实时缩略图
- php实现按指定大小等比缩放生成上传图片缩略图的方法
- nginx+lua+GraphicsMagick实现图片自动缩放功能(强烈推荐)
- 图片缩放_ASP.NET实现图片缩略图
- nginx+lua_nginx+GraphicsMagick生成实时缩略图
- 使用libjpeg库实现jpeg图片的缩放(缩略图)
- nginx+lua_nginx+GraphicsMagick生成实时缩略图
- 搭建带lua模块的nginx调用ImageMagick工具实现实时剪切缩放图片功能
- nginx+lua_nginx+GraphicsMagick生成实时缩略图
- Tengine + Lua + GraphicsMagick 实现图片自动裁剪/缩放
- 使用Tengine+Lua+GraphicsMagick实现图片自动裁剪缩放
- nginx+lua_nginx+GraphicsMagick生成实时缩略图