關於nodejs下圖片的裁剪、水印,網上的模塊很多,主要如下:
gm:https://github.com/aheckmann/gm
node-canvas:https://github.com/Automattic/node-canvas
node-images:https://github.com/zhangyuanwei/node-images
Cloudinary:http://cloudinary.com/documentation/node_image_manipulation
這里推薦使用gm模塊,首先是安裝:
先要安裝GraphicsMagick或者ImageMagick,因為gm是基於這兩種圖形處理工具包的。
直接上源碼:
var gm = require("gm"); var spawn = require('child_process').spawn; //提供生成node子進程的方法 var config = {}; config.position = { NorthWest:"NorthWest", North:"North", NorthEast:"NorthEast", West:"West", Center:"Center", East:"East", South:"South", SouthWest:"SouthWest", SouthEast:"SouthEast" }; /** * 裁剪圖片 * @param srcImg 待裁剪的圖片路徑 * @param width 寬度 * @param height 高度 * @param x x坐標 * @param y y坐標 */ function cropCurrentImg(srcImg,width, height, x, y) { gm(srcImg).crop(width, height, x, y).write(srcImg, function (err) { if (err) { return handler(err); } }); } /** * 裁剪圖片 * @param srcImg 待裁剪的圖片路徑 * @param destImg 裁剪后的圖片路徑 * @param width 寬度 * @param height 高度 * @param x x坐標 * @param y y坐標 */ function cropImg(srcImg,destImg,width, height, x, y) { gm(srcImg).crop(width, height, x, y).write(destImg, function (err) { if (err) { return handler(err); } }); } cropCurrentImg("../../public/aa.png","../../public/dest.jpg",100,100,50,50); /** * 縮放圖片 * @param srcImg 待縮放的圖片路徑 * @param size 縮放后的圖片大小(長寬均為size) */ function resizeCurrentImg(srcImg, size) { gm(srcImg).resize(size, size).write(srcImg, function (err) { if (err) { return handler(err); } }); } /** * 縮放圖片,默認輸出圖片質量75%,格式PNG * @param srcImg 待縮放的圖片路徑 * @param destImg 縮放后的圖片輸出路徑 * @param size 縮放后的圖片大小(長寬均為size) */ function resizeImgWithArgs(srcImg, destImg, size) { gm(srcImg).resize(size, size).write(destImg, function (err) { if (err) { return handler(err); } }); } /** * 縮放圖片 * @param srcImg 待縮放的圖片路徑 * @param destImg 縮放后的圖片輸出路徑 * @param quality 縮放的圖片質量,0~100(質量最優) * @param width 縮放后的圖片寬度 * @param height 縮放后的圖片高度 * @param imgFormat 縮放后的圖片格式 */ function resizeImgWithFullArgs(srcImg, destImg, quality, width, height, imgFormat) { gm(srcImg).resize(width, height).quality(quality).setFormat(imgFormat).write(destImg, function (err) { if (err) { return handler(err); } }); } /** * 添加水印 * @param srcImg 待添加水印的圖片路徑 * @param watermarkImg 水印圖片路徑 * @param destImg 添加水印后圖片輸出路徑 * @param alpha 透明度,0~100(為0表示全透明,100不透明) * @param position 水印位置,NorthWest, North, NorthEast, West, Center,East, SouthWest, South, or SouthEast */ function addWaterMark(srcImg,watermarkImg,destImg,alpha,position){ var composite = spawn('gm', ['composite', '-gravity', position, '-dissolve', alpha, watermarkImg, srcImg,destImg]); composite.on('exit', function (code) { }); } exports.config = config; exports.resizeCurrentImg = resizeCurrentImg; exports.resizeImgWithArgs = resizeImgWithArgs; exports.resizeImgWithFullArgs = resizeImgWithFullArgs; exports.cropCurrentImg = cropCurrentImg; exports.cropImg = cropImg; exports.addWaterMark = addWaterMark;