我正在使用 GraphicsMagick (1.3.16) 和 im4java (1.4.0) 来创建 GIF 的缩略图。在命令行中,我可以执行以下操作:
convert original.gif -coalesce -resize 100x100 +profile * thumb.gif
Run Code Online (Sandbox Code Playgroud)
并成功创建缩略图,保留动画。但是我的应用程序中的某些内容没有翻译,因为看似相同/相似的命令:
- -coalesce -resize 100x100 +profile * gif:-
Run Code Online (Sandbox Code Playgroud)
创建仅捕获动画的单个图像的缩略图。注意:输入通过管道输入,输出作为 BufferedImage 捕获。
如果有帮助,这里是用于创建我正在使用的上述 cmd 的代码块:
public static BufferedImage createThumb(byte[] imageFileData)
{
GMOperation op = new GMOperation();
op.addImage("-"); // input: stdin
op.coalesce();
op.resize(100, 100);
op.p_profile("*");
op.addImage("gif:-"); // output: stdout
ConvertCmd cmd = new ConvertCmd(true); // use GraphicsMagick
// Pipe the fileData to stdin, to avoid writing to a file first.
ByteArrayInputStream bais = new ByteArrayInputStream(imageFileData); …Run Code Online (Sandbox Code Playgroud) 我正在使用graphicsmagick 将图像大小调整为缩略图,但它添加了白色的周围边框填充。

我正在使用的命令是:
gm convert matrix.jpg -resize "80x80>" -gravity center -extent 80x80 thumbnail.jpeg
正如您所看到的,图像周围有一些白色填充,但我不想要这样。理想情况下,我希望(整个图像而不仅仅是其中的一部分)填充所需的 80x80 输出尺寸。
如何在 imagemagick 或graphicsmagick 中实现这一点?
我想转换一组文件,但不覆盖现有文件。如何使用 mogrify 指定最终文件格式?例如firstpic.png -> firstpic-thumbnail.png、secondpic.png -> secondpic-thumbnail.png等。
gm mogrify -size 150x150 *.png -resize 150x150 +profile "*" "%f-thumbnail.png"
有没有办法做到这一点?
我正在使用 Nodejs 的“gm”模块转换不同的图像和 pdf 文件。图像类型成功,但当我想将 PDF 转换为图像时遇到问题。我只需要将选定的一页从 pdf 文件转换为 jpg/png。如果我将整个 pdf 文件传递给“gm”,它只会将第一页保存到图像,但我找不到保存另一页的方法。
gm(file).toBuffer(format.toUpperCase(),
function (err, buffer) {
// so in buffer now we have converted image
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
我正在利用 AWS Lambda示例脚本使用 Node.js 和 ImageMagick/GraphicsMagick 库调整 JPG 图像的大小。我想做一个简单的修改,在调整大小后将图像从 JPG 转换为 WebP 格式。(GraphicsMagick 不支持 WebP,但 ImageMagick 支持,这是脚本中的子类)。根据此处缓冲区部分中的示例(将 JPG 转换为 PNG),使用以下代码块应该可以做到这一点。
gm('img.jpg')
.resize(100, 100)
.toBuffer('PNG',function (err, buffer) {
if (err) return handle(err);
console.log('done!');
})
Run Code Online (Sandbox Code Playgroud)
当我在本地 Node.js 安装中运行该代码块(用 WebP 替换 PNG)时,它可以工作。
但是,当我修改 AWS Lambda示例脚本的转换函数(见下文)并在 AWS 上执行它时,我收到以下“流产生空缓冲区”错误:
Unable to resize mybucket/104A0378.jpg and upload to mybucket_resized/resized-104A0378.jpg due to an error: Error: Stream yields empty buffer
Run Code Online (Sandbox Code Playgroud)
修改后的 transform() 函数(参见带有 'webp' 的行):
function tranform(response, next) …Run Code Online (Sandbox Code Playgroud) imagemagick amazon-web-services node.js graphicsmagick aws-lambda
我正在使用GraphicsMagick作为节点,并尝试在图像上为“乌尔都语/阿拉伯语”绘制文本,此文本为“ ???????????????”,文本正在输出图像上绘制,但正在绘制为“从左至右” ”,而它必须是“从右到左”,因为阿拉伯语/乌尔都语是“从右到左”语言。
gm("/file.png")
.fill('#FF0066')
.drawText(100, -150, "?????? ?????", 'Center')
.font("/alvi_Nastaleeq.ttf")
.fontSize('38px')
.encoding('Unicode')
Run Code Online (Sandbox Code Playgroud)
输出图像:
如果我正在尝试使用反向乌尔都语“ ??????????????” 字符串,即使文本无法正确绘制。
我在做什么错?我该如何解决?
谢谢,
我想从imagemagick转到graphicsmagick
但我遇到了一些语法问题
首先我需要将一些图像合并到PDF中
convert -density 300 page_*.tif output.pdf
然后我需要创建 PDF 第一页的缩略图
convert -density 300 file.pdf[0] -background white -alpha remove -resize 140x140 -strip -quality 40 thumb.jpg[0]
这工作正常..但我想将第一个命令切换为graphicsmagick
这里的graphicsmagick语法工作得很好
gm convert -density 300 page_*.tif output.pdf
但是,当使用输出创建缩略图时,imagemagick其尺寸正确,但实际图像在图像本身内部缩小了?!
https://secure.dyndev.dk/data/voucher/30000/400/30435_eb7e5d0a9df71b2783e2fa89efd9de12fcdb9679.pdf
https://secure.dyndev.dk/data/voucher/30000/400/30433_7710d6404534b0868ab8da41dd651e971b70e16b.pdf
基于 imagemagick 的这个问题,graphicsmagick 的等价物是什么?使用 ImageMagick 创建 Windows ICO 文件的秘诀?
另外我只想生成一个具有多种尺寸的完全透明的 ico 文件。我发现有一个xc:none选项适用于两者,但是是否有一个命令可以生成具有多种大小的透明 ico 文件?否则我必须先创建一个透明的 png 文件,然后从该 png 文件创建 ico 文件。
我一直在使用 ImageMagick,但它产生的结果非常模糊。
convert -density 300 ../images/favicons/procensus.svg -background transparent -colors 256 -define icon:auto-resize favicon2.ico
Run Code Online (Sandbox Code Playgroud)
它似乎以 300 的密度渲染图像,然后使用高斯滤波器调整图标中所有其他尺寸的大小。
我真正想要它做的是在图标中的每个像素大小上使用shape-rendering="crispEdges"重新渲染。
我希望 ImageMagick(或任何其他工具)以每个提供的 .ico 密度重新渲染 SVG。
请注意,这个工具应该只是我可以在包构建时使用的工具:一个用于 Linux 的开源可安装软件。
我有以下命令:
gm('input.jpg')
.crop(500, 500, 10, 10)
.write('output.jpg', function (err) {
if (err) {
console.log(err)
} else {
console.log('Success')
}
})
Run Code Online (Sandbox Code Playgroud)
我想添加一个条件,而不必编写2个不同的命令,所以它将是这样的:
var overlay = true
gm('input.jpg')
.crop(500, 500, 10, 10)
if(overlay == true){
.draw('image Over 0,0 750,750 overlay.jpg')
}
.write('output.jpg', function (err) {
if (err) {
console.log(err)
} else {
console.log('Success')
}
})
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码不会运行,我正在寻找一个可以工作的建议,没有2个不同的GM命令
graphicsmagick ×10
imagemagick ×6
node.js ×3
pdf ×2
aws-lambda ×1
favicon ×1
ico ×1
im4java ×1
image ×1
javascript ×1
svg ×1