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/51042388
2.配置
主要介绍的是配置
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