qn
Version:
Another qiniu API client for Node.js.
144 lines (132 loc) • 5.48 kB
JavaScript
/*!
* qn - lib/image.js
* Copyright(c) 2013 fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
* MIT Licensed
*/
;
/**
* Module dependencies.
*/
var utility = require('utility');
exports._getInfo = function (name, key, callback) {
var url = this.resourceURL(key) + '?' + name;
this._request(url, callback);
};
/**
* Get Image base infomation.
* @param {String} key
* @param {Function(err, info)} callback
* - {Object} info
* - {String} format "png", "jpeg", "gif", "bmp", etc.
* - {String} colorModel "palette16", "ycbcr", etc.
* - {Number} width
* - {Number} height
*/
exports.imageInfo = function (key, callback) {
this._getInfo('imageInfo', key, callback);
};
exports.exif = function (key, callback) {
this._getInfo('exif', key, callback);
};
/**
* 生成指定规格的缩略图
*
* @param {String} key
* @param {Object} options thumbnail options.
* - {Number} mode
* <mode>=1 表示限定目标缩略图的宽度和高度,放大并从缩略图中央处裁剪为指定 <Width>x<Height> 大小的图片。
* <mode>=2 指定 <Width> 和 <Height>,表示限定目标缩略图的长和宽,将缩略图的大小限定在指定的宽高矩形内。
* <mode>=2 指定 <Width> 但不指定 <Height>,表示限定目标缩略图的宽度,高度等比缩略自适应。
* <mode>=2 指定 <Height> 但不指定 <Width>,表示限定目标缩略图的高度,宽度等比缩略自适应。
* - {Number} width
* - {Number} height
* - {Number} [quality]
* - {String} [format] 指定目标缩略图的输出格式,取值范围:jpg, gif, png, webp 等图片格式
* @return {String} thumbnail url
*/
exports.imageView = function (key, options) {
var url = this.resourceURL(key) + '?imageView/' + options.mode;
if (options.width) {
url += '/w/' + options.width;
}
if (options.height) {
url += '/h/' + options.height;
}
if (options.quality) {
url += '/q/' + options.quality;
}
if (options.format) {
url += '/format/' + options.format;
}
return url;
};
/**
* 高级图像处理接口(第二版)(缩略、裁剪、旋转、转化)
* 除了能够方便的生成图像缩略图之外,七牛云存储提供了其它高级图像处理接口,包含缩略、裁剪、旋转等一系列的功能.
*
* @param {String} key
* @param {Object} options
* - {String} [thumbnail] 缩略图大小,详解见下。
* - {String} [gravity] 位置偏移,只会使其后的裁剪偏移({offset})受到影响。默认值为 NorthWest(左上角)。
* 可选值:NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast 。
* - {String} [crop] 裁剪大小和偏移,详解见下。
* - {Number} [quality] 图片质量,取值范围是[1, 100]。
* - {Number} [rotate] 旋转角度。
* - {String} [format] 输出格式,可选为jpg, gif, png, bmp, tiff, webp等。
* @return {String}
*/
exports.imageMogr = function (key, options) {
var url = this.resourceURL(key) + '?imageMogr/v2/auto-orient';
for (var k in options) {
url += '/' + k + '/' + options[k];
}
return url;
};
/**
* 图像水印接口支持两种加水印的方式:图片水印和文字水印。
*
* @param {String} key
* @param {Object} options
* - {Number} mode
* <Mode> = 1 时,表示图片水印:
* - {String} image 水印图片,使用图片水印时需指定用于水印的远程图片URL。EncodedImageURL = urlsafe_base64_encode(ImageURL)
* <Mode> = 2 时,表示文字水印:
* - {String} text 水印文本,文字水印时必须。EncodedText = urlsafe_base64_encode(Text)
* - {String} [font] 字体名,若水印文本为非英文字符(比如中文)构成,则必须。EncodedFontName = urlsafe_base64_encode(FontName)
* - {Number} [fontsize] 字体大小,0 表示默认,单位: 缇,等于 1⁄20 磅。
* - {String} [fill] 字体颜色。EncodedTextColor = urlsafe_base64_encode(TextColor)。
* RGB格式,可以是颜色名称(比如 red)或十六进制(比如 #FF0000),
* 参考 [RGB颜色编码表](http://www.rapidtables.com/web/color/RGB_Color.htm)
* - {Number} [dissolve] 透明度,取值范围 1-100,默认值 100,即表示 100%(不透明)。
* - {String} [gravity] 位置,默认值为 SouthEast(右下角)。
* 可选值:NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast 。
* - {Number} [dx] 横向边距,单位:像素(px),默认值为 10。
* - {Number} [dy] 纵向边距,单位:像素(px),默认值为 10。
* @return {String}
*/
exports.watermark = function (key, options) {
var mode = Number(options.mode) || 1;
var url = this.resourceURL(key) + '?watermark/' + mode;
if (mode === 1) {
url += '/image/' + utility.base64encode(options.image, true);
} else {
url += '/text/' + utility.base64encode(options.text, true);
if (options.font) {
url += '/font/' + utility.base64encode(options.font, true);
}
if (options.fontsize) {
url += '/fontsize/' + options.fontsize;
}
if (options.fill) {
url += '/fill/' + utility.base64encode(options.fill, true);
}
}
var names = ['dissolve', 'gravity', 'dx', 'dy'];
for (var i = 0; i < names.length; i++) {
var name = names[i];
if (options[name] !== undefined) {
url += '/' + name + '/' + options[name];
}
}
return url;
};