现要对之前的文件服务器进行扩展,听网上说gm处理图像来一套一套的。so决定使用该工具去实现文件服务器的图片处理这块。目标有下

现在通过参数去获得缩略图
http://xxx.xxx.com/image/2f696d6167652f75706c6f61642f323031362f31302f31302f313030/0/w/100/h/2100/12/format/jpg/q/75

后面几个参数顺序可以调换如:
http://xxx.xxx.com/image/2f696d6167652f75706c6f61642f323031362f31302f31302f313030/0/format/jpg/q/75/w/100/h/2100
http://xxx.xxx.com/image/2f696d6167652f75706c6f61642f323031362f31302f31302f313030/0/format/jpg/q/75/w/100/h/2100

接口规格

http://file.ttyouni.com/image/hex编码/<mode>/w/<width>/h/<height>/format/<Format>/q/<Quality>

mode参数说明
0:指定高宽缩放(可能变形)
1:指定宽,高按比例(但是如果原图的宽比给定的小的话,则不进行压缩)
2:指定高,宽按比例(但是如果原图的高比给定的小的话,则不进行压缩)
3:指定高宽裁减(不变形)
4:固定(可视为第一种的智能版),将图片按照原始图片的比例为了适应进行按比例缩小,若显示区域偏大则保持原样

其它参数说明
format:新图的输出格式 取值范围:jpg,gif,png,默认为原图格式
q:新图的图片质量 取值范围是[1, 100],默认75。
w: 目标图片的宽度
h:目标图片的高度

接下来是工具。

下载地址:https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/1.3.25/文档地址:http://aheckmann.github.io/gm/docs.html这里的resize的%,@,<,> 符号都没看懂了。希望有缘人解释。 see the GraphicsMagick docs for details
很多方法也没看懂,应该是走了很多复杂的路,贴代码如下,希望路过的指点一二
var fs = require('fs')
, gm = require('gm'); var imageParameter = require('../models/ImageParameter'); exports.createImage = function (oriUrl,descUrl,obj,successFn) {
var outputImage = gm(oriUrl);
var m = imageParameter.getMode();
outputImage.size(function(err, ori) {
//设置图片质量格式
outputImage = outputImage.quality(obj.quantity).setFormat(obj.format);
//调整尺寸
switch(obj.mode){
case m.HW://指定高宽缩放(可能变形)
outputImage = outputImage.resize(obj.width, obj.height,"!");
break;
case m.W://指定宽,高按比例
if(obj.width >= ori.width){
outputImage = outputImage.resize(ori.width, null);
}else{
outputImage = outputImage.resize(obj.width, null);
}
break;
case m.H://指定高,宽按比例
if(obj.height >= ori.height){
outputImage = outputImage.resize(null, ori.height);
}else{
outputImage = outputImage.resize(null, obj.height);
}
break;
case m.CUT://裁剪(不变形)
var toHeight = ori.width;
var toWidth = ori.height;
var x = 0;
var y = 0;
if(ori.width >= obj.width && ori.height >= obj.height){
//以高为基准
if(ori.width/ori.height >= obj.width/obj.height){
toHeight = ori.height;
toWidth = ori.height * obj.width / obj.height;
x= (ori.width -toWidth)/2;
y=0;
}else{
toWidth = ori.width;
toHeight = ori.width * obj.height / obj.width;
x= 0;
y= (ori.height -toHeight)/2;
}
}else{
x = (ori.width - obj.width)/2;
y = (ori.height - obj.height)/2;
toWidth = obj.width;
toHeight = obj.height;
}
outputImage= outputImage.crop(toWidth,toHeight, x, y);
break;
case m.FIT://固定
if(obj.width >= ori.width || obj.height >= ori.height){
outputImage = outputImage.resize(ori.width, ori.height);
}else{
if(obj.width/ori.width > obj.height/ori.height){
outputImage = outputImage.resize(obj.width, null);
}else{
outputImage = outputImage.resize(null, obj.height);
}
}
break;
default:
break;
}
//写入图片
outputImage.write(descUrl, function (err) {
if (!err){
successFn();
}
});
}
); }

Nodejs文件服务器
http://www.cnblogs.com/chenjianxiang/p/5963011.html

Node.js 使用gm处理图像的更多相关文章

  1. Node.js 引用 gm 包错误 Error: Could not execute GraphicsMagick/ImageMagick

    今天在学习前后台图像剪切时,下载了有图片剪切瑞士军刀之称的 GraphicsMagick. 给 gm.exe 配置了环境变量,在 npm 下好了 gm 的模块,但是运行却出现了错误. 错误如图: [E ...

  2. 玩node-images模块---Node.js轻量级跨平台图像编解码库

    Node.js轻量级跨平台图像编解码库 github:https://github.com/zhangyuanwei/node-images Features 功能特性 轻量级:无需安装任何图像处理库 ...

  3. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  4. 用node.js给图片加水印

    一.准备工作: 首先,确保你本地已经安装好了node环境.然后,我们进行图像编辑操作需要用到一个Node.js的库:images.这个库的地址是:https://github.com/zhangyua ...

  5. Node.js与Sails~自定义响应体responses

    回到目录 在Node.js里,你可以控制请求和响应,自己可以定义自己的响应方式,如对文本如何响应,对json如何响应,对图像流如何响应等等,而这些在Sails架构里,变得更加容易和清晰了,它位于项目的 ...

  6. [转]为什么我要用 Node.js? 案例逐一介绍

    原文地址:http://blog.jobbole.com/53736/ 介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样, ...

  7. 为什么要使用 Node.js

    这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正. Node.js 是什么 传统意义上的 JavaScript 运行在浏览器上,这是因为浏览器内核实际上分为两个部 ...

  8. 【转】为什么我要用 Node.js? 案例逐一介绍

    原文转自:http://blog.jobbole.com/53736/ 介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样, ...

  9. Node.js Express框架

    Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...

随机推荐

  1. Gimp教程:多图层多渐变的文字效果

    这个教程是我在国外的视频网站上学的,制作这个教程也很久了,今天在网盘翻看到这个截图版本,正好整理到博客,方便管理.记得当时花了一下午的时间来边做边截图修改制作,个人觉得这个教程还是很好的,原作者很有创 ...

  2. jQuery小例

    jQuery小例子 使用前,请先引用jquery 1,map遍历数组   2,jQuery对象与DOM对象才做元素和互转 3,prevall与nextall 4,jquery版的星星评分控件 5,jq ...

  3. JavaScript语言基础知识8

    这篇文章是对前面学习的知识进行总结: 1.JavaScript支持多种数据类型,如数值类型.字符串类型.布尔类型等. 2.在JavaScript中,字符串是用引號括起来的字符系列,转义字符能够用来表示 ...

  4. 自己动手实现Expression翻译器 – Part Ⅱ

    上一节我们了解了Linq查询大体上是如何运转的,并针对SQL表达式进行建模(DbExpression),这一节的重点在于如何将表达式转换为DbExpression. 可以说只要能生成结构清晰的DbEx ...

  5. jquery表格datagrid单元格显示图片及分页使用

    要想达到自定义显示表格框的目的比如显示图片,超链接,按钮的形式,只需要给列添加formatter属性即可,比如显示图片: columns: [[                             ...

  6. 《剑指Offer》面试题-用两个栈实现队列

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例.对于每个测试样例,第一行输入一个n(1<=n<=100 ...

  7. Binder机制,从Java到C (8. ServiceManager in Native)

    在第三篇 Binder机制,从Java到C (3. ServiceManager in Java) 中,讲到ServiceManager的Stub端在Native,Proxy端在Java.实际上,还要 ...

  8. 统计重1到n的正整数中1的个数

    问题: 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数. 例如:N= 2,写下1,2.这样只出现了1个“1”. N= 12,我们会写下1, 2, 3, 4, ...

  9. SVN merge

    SVN merge的主干,分支的相互合并操作   SVN merge的主干,分支的相互合并操作 本文只研究了 在本地如何进行主干,分支的相互合并 的操作:从主干到分支,从分支到主干. 本地客户端工具是 ...

  10. linux下使用select实现精确定时器

    在编写程序时,我们经常回用到定时器.本文讲述如何使用select实现超级时钟.使用select函数,我们能实现微妙级别精度的定时器.同时,select函数也是我们在编写非阻塞程序时经常用到的一个函数. ...