如何为graphicsmagick配置JPEG委托?

时间:2013-04-18 23:37:59

标签: node.js imagemagick jpeg graphicsmagick

我想将图像裁剪到指定的像素区域。我想使用https://github.com/aheckmann/gm中的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 folder包含代理的源代码(readme。)所以我按照我的安装文档中的建议下载,解压缩并安装jpegsrc.v6b.tar.gz源文件。

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

gm convert -list formats中没有列出JPEG代表。

我正在从Imagemagick迁移,即使没有安装此库,也没有任何调整jpeg的问题。

我必须做些什么才能让图形处理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

3 个答案:

答案 0 :(得分:5)

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

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) };
});

答案 1 :(得分:2)

鉴于您使用的是Linux Mint,找到libjpeg的GraphicsMagick的最佳解决方案是安装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),最好不要在系统上安装重复的库。

答案 2 :(得分: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