【问题标题】:How do I configure a JPEG delegate for graphicsmagick?如何为 graphicsmagick 配置 JPEG 委托?
【发布时间】:2013-04-12 06:31:10
【问题描述】:

我想将图像裁剪到指定的像素区域。我想使用来自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 委托:

<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 大小时从未遇到任何问题,即使我没有安装此库。

我必须做什么才能让 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

【问题讨论】:

    标签: node.js imagemagick jpeg graphicsmagick


    【解决方案1】:

    我通过告诉 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) };
    });
    

    【讨论】:

      【解决方案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),并且最好不要在系统上存在重复的库。

      【讨论】:

        【解决方案3】:

        我意识到这严格来说是一个 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-18
          • 1970-01-01
          • 2011-05-19
          相关资源
          最近更新 更多