UNPKG

codekart

Version:

Web application framework for Node.js

128 lines (112 loc) 3.26 kB
/* * 必须在linux下且安装ImageMagick后才能使用 * */ var exec = require('child_process').exec , bin = '/usr/local/imagemagick/bin/' , identify = bin+'identify ' //获取图片信息 , convert = bin+'convert '; //处理图片 /* * 缩放图片 * ag.in = 源文件路径 * ag.out = 处理后的图片输出路径 * ag.p = 要缩放的比例 浮点数值 * ag.w = 要缩放的宽度 * ag.h = 要缩放的高度 * ag. * */ exports.resize = function(ag,callback){ var wh = ''; if(ag.p){ wh = parseInt(100*ag.p)+'%'; }else{ wh = ag.w+'x'+ag.h; } var size = convert+ag.in+' -resize '+wh+' '+ag.out; exec(size,{}, function (error, stdout, stderr) { if(error){ console.log('exec error: ' + error); return; } callback?callback():0; }); }; /* * 居中截取图片指定大小 * ag.in = 源文件路径 * ag.out = 处理后的图片输出路径 * ag.w = 要截取的宽度 * ag.h = 要截取的高度 * ag. * */ exports.cropize = function(ag,callback){ //返回宽高 cropize__getWH(ag,function(wh){ cropize__size(ag,wh,function(wh){ cropize__crop(ag,wh,function(){ callback?callback():0; }); }); }); }; //调节图片大小 function cropize__size(ag,wh,callback){ var rwh=0 , i_sc = ag.w/wh.w , back = {}; //返回调节后的宽高 if(ag.w/wh.w > wh.w/wh.w){ //裁剪宽高比大于原始宽高比,则以宽度为条件 rwh = ag.w; back.w = ag.w; back.h = (ag.w/wh.w)*wh.h; }else{ rwh = 'x'+ag.h; back.h = ag.h; back.w = (ag.h/wh.h)*wh.w; } var size = convert+ag.in+' -resize '+rwh+' '+ag.out; exec(size,{}, function (error, stdout, stderr) { if(error){ console.log('exec error: ' + error); return; } callback(back); }); } //按比例切割图片 function cropize__crop(ag,wh,callback){ var cr = '' , sc = 0; if(ag.w<wh.w){ //去掉左右多余部分 sc = parseInt(Math.abs(wh.w-ag.w)/2); cr = ag.w+'x'+ag.h+'+'+sc+'+0 '; }else{ if(wh.h-ag.h<1){ sc = 0; }else{ sc = parseInt(Math.abs(wh.h-ag.h)/2); } cr = ag.w+'x'+ag.h+'+0+'+sc+' '; } var crop = convert+ag.out+' -crop '+cr+ag.out; exec(crop,{}, function (error, stdout, stderr) { if(error){ console.log('exec error: ' + error); return; } callback(); //执行回调 }); } //获取图片的宽高 function cropize__getWH(ag,callback){ var idfy = identify+ag.in; exec(idfy,{}, function (error, stdout, stderr) { if(error){ console.log('exec error: ' + error); return; } //stdout : 123.jpg 100x100 100x100+0+0 8-bit sRGB 5.78KB 0.000u 0:00.000 var wh = stdout.split(' ')[2].split('x') , w = Number(wh[0]) , h = Number(wh[1]); callback({w:w,h:h}); //返回宽高 }); }