|
jimp是一个非常优秀的nodejs图片截取模块。它无需再电脑上面安装其他工具,直接安装jimp模块就可以使用。
jimp的优势:1.简单,2.支持回调方式和ES6(promise)语法也可以链式调用 3. 丰富的api 4.无需安装任何程序(gm和canvas都需要)
nodejs图片截取模块jimp快速入门:
- 1.安装jimp 通过cnpm install --save jimp安装
- 2、引入jimp
- var Jimp = require("jimp");
- 3、使用:
- Jimp.read(target, function (err, lenna) {
- if (err) throw err;
- lenna.resize(200, 200)
- .quality(80)
- // .greyscale()
- .write(target+'_200x200'+path.extname(target));
- });
复制代码
1、nodejs egg.js图片截取模块jimp 回调模式使用:
- var Jimp = require("jimp");
-
- Jimp.read("lenna.png", function (err, lenna) {
- if (err) throw err;
- lenna.resize(256, 256)
- .quality(60)
- .greyscale()
- .write("lena-small-bw.jpg");
- });
复制代码
2、nodejs egg.js图片截取模块jimp Promise模式使用:
- var Jimp = require("jimp");
-
- Jimp.read("lenna.png").then(function (lenna) {
- lenna.resize(256, 256)
- .quality(60)
- .greyscale()
- .write("lena-small-bw.jpg");
- }).catch(function (err) {
- console.error(err);
- });
复制代码
因为代码是运行在node平台,个人强烈建议使用promise的写法。
3、更多的用法可以参考github:https://github.com/oliver-moran/jimp,我把一些api复制下来
- /* Resize */
- image.contain( w, h[, mode] ); // scale the image to the given width and height, some parts of the image may be letter boxed
- image.cover( w, h[, mode] ); // scale the image to the given width and height, some parts of the image may be clipped
- image.resize( w, h[, mode] ); // resize the image. Jimp.AUTO can be passed as one of the values.
- image.scale( f[, mode] ); // scale the image by the factor f
- image.scaleToFit( w, h[, mode] ); // scale the image to the largest size that fits inside the given width and height
-
- // An optional resize mode can be passed with all resize methods.
-
- /* Crop */
- image.autocrop(); // automatically crop same-color borders from image (if any)
- image.crop( x, y, w, h ); // crop to the given region
-
- /* Composing */
- image.blit( src, x, y[, srcx, srcy, srcw, srch] );
- // blit the image with another Jimp image at x, y, optionally cropped.
- image.composite( src, x, y ); // composites another Jimp image over this iamge at x, y
- image.mask( src, x, y ); // masks the image with another Jimp image at x, y using average pixel value image.rotate) and when writing formats that don't support alpha channels
-
- /* Flip and rotate */
- image.flip( horz, vert ); // flip the image horizontally or vertically
- image.mirror( horz, vert ); // an alias for flip
- image.rotate( deg[, mode] ); // rotate the image clockwise by a number of degrees. Optionally, a resize mode can be passed. If `false` is passed as the second parameter, the image width and height will not be resized.
-
- // JPEG images with EXIF orientation data will be automatically re-orientated as appropriate.
-
- /* Colour */
- image.brightness( val ); // adjust the brighness by a value -1 to +1
- image.contrast( val ); // adjust the contrast by a value -1 to +1
- image.dither565(); // ordered dithering of the image and reduce color space to 16-bits (RGB565)
- image.greyscale(); // remove colour from the image
- image.invert(); // invert the image colours
- image.normalize(); // normalize the channels in an image
-
- /* Alpha channel */
- image.fade( f ); // an alternative to opacity, fades the image by a factor 0 - 1. 0 will haven no effect. 1 will turn the image
- image.opacity( f ); // multiply the alpha channel by each pixel by the factor f, 0 - 1
- image.opaque(); // set the alpha channel on every pixel to fully opaque
- image.background( hex ); // set the default new pixel colour (e.g. 0xFFFFFFFF or 0x00000000) for by some operations (e.g. image.contain and
-
- /* Blurs */
- image.gaussian( r ); // Gaussian blur the image by r pixels (VERY slow)
- image.blur( r ); // fast blur the image by r pixels
-
- /* Effects */
- image.posterize( n ); // apply a posterization effect with n level
- image.sepia(); // apply a sepia wash to the image
复制代码
1. 在图片上书写文字
- Jimp.loadFont( path ).then(function (font) {
- image.print(font, x, y, str);
- });
复制代码
2. 读取图片字节流
- image.getBuffer( buffer , cb )
复制代码
3. 图片上某一点像素的操作
- image.getPixelColor(x, y) //获取图片上某一点的像素值
- image.setPixelColor(hex, x, y); //设置图片上的某一点像素
复制代码
4. 工具函数
- Jimp.rgbaToInt(r, g, b, a); //将十进制转化为十六进制
- Jimp.intToRGBA(hex); //将十六进制转化为十进制
复制代码
5. 判断图片是否为同一张图
- Jimp使用的了pHash算法对图片进行了计算,我们可以利用这个特点进行图片的比较,避免服务器保存了相同的图片
复制代码
海明威码判别
- Jimp.distance(image1, image2); //返回值为相似程度,0表示两张图完全一样
复制代码
像素比较法
- var diff = Jimp.diff(image1, image2, threshold);
- diff.image; //一张用来展示两张图片不一样的地方的图片
- diff.percent; //像素不相同的比例
复制代码
其中参数中threshold的取值为0-1,代表了比较的严格程度,0表示最严格,实际中可以结合使用两种方式来判断。
|
|