调整大小并裁剪图像并保持宽高比NodeJS&gm

use*_*539 28 node.js graphicsmagick

我一直在尝试使用gmNodeJS 的软件包创建一些缩略图,但我很幸运.我需要调整大于600x600的图像(可以是任何宽度/高度,从给定的一个开始)但是当我将大小传递给gm时,它会创建一个与我请求的大小不同的图像.

例如,鉴于此代码,我假设运行node app /path/to/image.png我将收到一个大小为200x100的图像,但我得到的是180x100或200x90的图像......

gm(fileLocation)
    .thumb(200, 100, 'processed.' + process.argv[2].split('.').pop(), function() {
        console.log("Done!");
    });
Run Code Online (Sandbox Code Playgroud)

我也尝试过调整大小选项.甚至有一个强制大小的选项,但输出的宽高比变得可怕......

gm('/path/to/image.jpg')
    .resize(353, 257)
    .write(writeStream, function (err) {
         if (!err) console.log(' hooray! ');
    });
Run Code Online (Sandbox Code Playgroud)

mik*_*rey 110

gm使用模块获得具有中心重力的经过调整大小的裁剪图像,您可以使用与此类似的内容:

gm('/path/to/image.jpg')
  .resize('200', '200', '^')
  .gravity('Center')
  .crop('200', '200')
  .write(writeStream, function (err) {
    if (!err) console.log(' hooray! ');
  });
Run Code Online (Sandbox Code Playgroud)

该函数的'^'参数resize将告诉GraphicsMagick使用高度和宽度作为最小值而不是默认行为maximum.生成的已调整大小的图像将具有指定尺寸的宽度高度,而不符合尺寸的尺寸大于指定尺寸.

然后gravity函数告诉GraphicsMagick以下crop函数应该如何表现,这会将图像裁剪为最终大小.

您可以在gm此处找到模块使用的GraphicsMagick选项的详细文档:http://www.graphicsmagick.org/GraphicsMagick.html

  • 这应该是公认的答案 (15认同)

Pat*_*nio 8

尝试使用imagemagickNodeJS的软件包:https://github.com/yourdeveloper/node-imagemagick

im.crop({
    srcPath: process.argv[2],
    dstPath: 'cropped.' + process.argv[2].split('.').pop(),
    width: 200,
    height: 200,
    quality: 1,
    gravity: 'Center'
}, function(err, stdout, stderr){
    if (err) throw err;
    console.log('resized ' + process.argv[2].split('/').pop() + ' to fit within 200x200px');
});
Run Code Online (Sandbox Code Playgroud)

更新:请注意,node-imagemagick包在相当长的一段时间内没有更新.请考虑Freyday的答案,因为它是最新的.