我想将图像裁剪到指定的像素区域。我想使用 https://github.com/aheckmann/gmgm 模块。
我正在运行 Linux Mint 13 和 node.js v0.9.4pre。

我遇到了一个错误,听起来 graphicsmagick 不知道 jpegs:

Error: Command failed: gm convert: No decode delegate for this image format (./assets/images/temp/2aadd4379e1cf2b59429994270db2a8a.jpg)

果然,gm convert -list formats 没有显示 jpeg 委托(delegate):
<snip>
     IPTC P  rw-  IPTC Newsphoto
 IPTCTEXT P  rw-  IPTC Newsphoto text format
IPTCWTEXT P  rw-  IPTC Newsphoto text format
      K25 S  r--  Kodak Photo RAW
<snip>

graphicsmagick 有一个 ftp folder 包含代表的源代码(带有 readme 。)所以我下载、解压缩并安装了 jpegsrc.v6b.tar.gz ,如我的源文件随附的安装文档中的建议。

我很确定 jpeg 库安装了 cjpegdjpeg 以及其他东西。但是,我没有找到 make uninstall 或 list 。我还没有尝试在这个版本上安装任何其他版本的 jpeg 库。安装 jpeg 库后,我卸载并重建了 graphicsmagick。

尽管如此,gm convert -list formats 中没有列出 JPEG 委托(delegate)。

我正在从 Imagemagick 迁移,即使我没有安装这个库,它也从未在调整 jpeg 大小时遇到​​任何问题。

我必须怎么做才能让 graphicsmagic 处理 jpegs?

这是我调用 gm 的方式:
    var gmagic = require('gm');
    gmagic(cfg.tmpPath)
    .crop(h,w,x0,y0)
    .write(cfg.croppedPath, function(err){
      if(err){ done(err) }
        else { done(null, cfg.croppedPath) };
    });

以下是我用来安装 jpeg 库和 graphicsmagick 的命令:
$ cd ~/source
$ wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
$ tar -xzvf jpegsrc.v6b.tar.gz
$ cd jpeg-6b
$ ./configure
$ make
$ sudo make install

$ cd ~/source
$ wget ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/1.3/GraphicsMagick-1.3.18.tar.xz
$ tar -xJvf GraphicsMagick-1.3.18.tar.xz
$ cd GraphicsMagick-1.3.18
$ ./configure
$ make
$ sudo make install

$ npm install gm

最佳答案

通过告诉 gm 库使用 imagemagick 二进制文件而不是默认的 graphicsmagic 二进制文件,我找到了一个成功的解决方法:

var gmagic   = require('gm');
var imagic   = gmagic.subClass({imageMagick: true});
...
imagic(cfg.tmpPath)
.crop(h,w,x0,y0)
.write(cfg.croppedPath, function(err, stdout, stderr, command){
  if(err){ next(err) }
  else { next(null, raft) };
});

关于node.js - 如何为 graphicsmagick 配置 JPEG 委托(delegate)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16094875/

10-10 08:26