imagemagick - 如何使用 ImageMagick 转换工具修剪 png,并使所有东西与原始中心保持相同的距离?

标签 imagemagick imagemagick-convert

我在棋盘上有一个带有一些透明度的 png,我想修剪透明度,并使所有东西与原始中心的距离相同。 我使用 ImageMagick 的转换工具 例如,

原来的。

The original

我想要的结果。

The correct result

我使用 convert original.png -trim +repage out.png 的结果

The wrong result

原文件在这里

enter image description here

最佳答案

我可以通过在 Windows 10 的 ubuntu bash shell 中使用 IM 6.8.9-9 运行此命令来获得您描述的结果...

convert test.png -write mpr:input -duplicate 3 \
   -distort SRT %[fx:t*90] -background none -layers merge -trim \
   -set option:pagewide %[w] -set option:pagehigh %[h] -set option:pageoffset %[fx:page.x] \
   -delete 0 mpr:input -set page %[pagewide]x%[pagehigh]-%[pageoffset]-%[pageoffset] \
   -coalesce result.png

读取输入,在临时内存中存储一​​个副本,再制作 3 个副本,并将它们旋转 0、90、180 和 270 度。然后它将它们展平并使用修剪结果来计算最终图像尺寸和偏移量。接下来,它会删除修改后的图像,将原始图像从临时内存中取回,并通过将这些计算出的页面设置应用于原始图像来创建输出。

这应该适用于方形图像。如果宽度和高度尺寸不同,计算会变得更加复杂。

编辑添加:我在下面添加的命令应该采用任何输入图像并尽可能多地修剪透明,同时将原始中心像素保持在结果的中心......

convert test.png -write mpr:input -background none \
   -rotate 180 mpr:input -composite -set page %[@] \
   -set option:bounds %[fx:page.width]x%[fx:page.height]-%[fx:page.x]-%[fx:page.y] \
   -delete 0 mpr:input -set page %[bounds] -coalesce result.png

它从顶部和底部修剪相同的量,从左侧和右侧修剪相同的量,但顶部/底部的量可能与左侧/右侧的量不同。

关于imagemagick - 如何使用 ImageMagick 转换工具修剪 png,并使所有东西与原始中心保持相同的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50229237/

相关文章:

python - 在 Python 中从单个大图像创建多个缩略图的最快方法

node.js - ImageMagick:字符串中的表情符号被写成问号

linux - 如何在 Perl 中使用 Image::Magic 增加特定像素的 RGB 值?

imagemagick - 合成另一个图像,但有边距/填充

css - ImageMagick 将 SVG 转换为具有透明背景的 PNG

command-line-interface - imagemagick 裁剪错误选项需要参数 -crop

text - 如何在 ImageMagick 中绘制文本和阴影?

python - MoviePy VideoFileClip 实例没有属性 'reader'

ruby - 使用 RMagick 合成处理过的图像

python - 如何使用 Python 解码内存中的 JPEG XR 文件