zoukankan      html  css  js  c++  java
  • nodejs图片裁剪、缩放、水印

    关于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模块,首先是安装:

    QQ截图20150910164315

    先要安装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;
  • 相关阅读:
    memcache内存估算整理
    yii2-更改默认显示的通用主页
    微信小程序开发工具中快捷键
    微信个人公众号推广
    [微信小程序]编译.wxss出错,2 not found
    [转载]SSH框架搭建详细图文教程
    网址收集
    在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)
    css与html基础收集
    js与jq基础记录
  • 原文地址:https://www.cnblogs.com/vipzhou/p/4798769.html
Copyright © 2011-2022 走看看