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

先要安装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;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

5248
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

8868
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2862
来自专栏码匠的流水账

聊聊NettyConnector的start及shutdown

reactor-netty-0.7.6.RELEASE-sources.jar!/reactor/ipc/netty/NettyConnector.java

1031
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

39410
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

3000
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3685
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4425
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5827
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

7336

扫码关注云+社区