【问题标题】:How can i force the imagemagick module of nodejs to output one single image only?如何强制 nodejs 的 imagemagick 模块只输出一个图像?
【发布时间】:2014-07-01 03:32:48
【问题描述】:

我在 Nodejs 中使用 imagemagick 模块

im  = require('imagemagick');

imagemagick 模块使用 imagemagick 命令行工具。 我使用 convert 方法裁剪图像

im.convert([image_path, '-crop', '200x150', '-gravity', 'center', target_path],
  function(err, stdout){}
);

这会产生两个图像。一个带有裁剪的图像区域 - 第二个带有我试图摆脱的图像垃圾。

如何强制 imagemagick 只输出一个图像文件?

【问题讨论】:

    标签: node.js imagemagick imagemagick-convert node-imagemagick


    【解决方案1】:

    根据imagemagick documentation 进行裁剪,这无疑有点迟钝(已添加重点):

    geometry 参数的宽度和高度给出了裁剪后图像的大小,偏移量中的 x 和 y(如果存在)给出了裁剪后图像左上角的位置到原始图像

    ...

    如果存在 x 和 y 偏移,则生成单个图像,由裁剪区域的像素组成。

    ...

    如果省略 x 和 y 偏移,则会生成一组指定几何图形的图块,覆盖整个输入图像。

    ...所以,您只需指定 xy 偏移量作为几何参数的一部分,如下所示:200x150-100-75

    请注意,我已将 -100-75 指定为裁剪区域的左上角,这是因为您将 gravity 设置为 center,但似乎 imagemagick 试图智能地确定根据您的重力选择合适的距离目标,当您选择center 时,我看不到它的确切行为。因此,您可能需要稍微尝试一下,或者您可以省略 gravity 并使用原始图像左上角的实际偏移量。

    【讨论】:

    • +1 表示报价。我认为重心会使图像居中并从图像中间裁剪区域
    • 是的,他们似乎对crop 命令有点满意,大多数人都希望它自动丢弃不在指定区域的任何东西,除非你指定偏移量。
    【解决方案2】:

    我不得不使用+delete 参数从图像序列中删除最后一张图像。

    im.convert([image_file.path, '-crop', geometry, '+delete', thumb_path], ...
    

    【讨论】:

      猜你喜欢
      • 2011-05-10
      • 2017-02-04
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2021-04-07
      • 2019-06-14
      相关资源
      最近更新 更多