我想将图像裁剪到指定的像素区域。我想使用 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 委托(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 库安装了
cjpeg
和 djpeg
以及其他东西。但是,我没有找到 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/