4

我想将图像裁剪到指定的像素区域。我想使用gm来自https://github.com/aheckmann/gm的模块。我正在运行 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 代表:

<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 文件夹,其中包含代表的源代码(带有自述文件。)所以我下载、解压缩并jpegsrc.v6b.tar.gz按照源文件随附的安装文档中的建议进行安装。

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

仍然没有列出 JPEG 代表gm convert -list formats

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

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


这是我调用 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
4

3 回答 3

5

我通过告诉 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) };
});
于 2013-04-19T14:11:46.840 回答
2

鉴于您使用的是 Linux Mint,GraphicsMagick 查找 libjpeg 的最佳解决方案是安装 libjpeg 开发包(libjpeg-dev),重新运行 GraphicsMagick 配置脚本,重新构建并安装。确保为支持您感兴趣的其他格式的库添加 -dev 包。

如果要使用从源代码安装的 libjpeg,则需要将选项 LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include 添加到 GraphicsMagick 配置脚本调用。请注意,Linux Mint 可能带有与 jpeg 6b 不同的 libjpeg(例如 jpeg 8 或 libjpeg turbo),并且最好不要在系统上拥有重复的库。

于 2013-04-25T13:37:55.353 回答
1

我意识到这严格来说是一个 Linux 问题,但也许这会对某人有所帮助......

在 Mac 上,我改用 HomeBrew。只需运行这 3 行(这chown行对我来说是必要的,你可能想先不试试):

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
sudo chown -R $USER:admin /usr/local
brew install graphicsmagick

如果它抱怨 jpeg 库被取消链接,运行brew doctor+ 按照说明链接任何丢失的“桶”。

如果有些事情搞砸了,你想重新开始(见https://stackoverflow.com/a/17846596/188926):

brew uninstall imagemagick graphicsmagick libpng jpeg
brew cleanup -s
brew install graphicsmagick
于 2015-06-17T09:24:22.533 回答