9 切片缩放与 imagemagick?

9-slice scaling with imagemagick?

给定尺寸为 120x120 像素的输入图像, 我想用 imagemagick 来执行 9-slice scaling.

类似于 (除了在我的例子中,中心元素“5”不需要改变)

如何使用 imagemagick 执行此操作?

(也欢迎对 Linux 上可用的任何其他 CLI 工具提出建议!)

这是在 ImageMagick 6 中执行此操作的一种方法(Unix 语法)。

输入:

convert logo.png -write mpr:img +delete \
\( \
\( mpr:img -gravity northwest -crop 10x10+0+0 +repage -resize 300x150%! \) \
\( mpr:img -gravity north -crop 100x10+0+0 +repage -resize 100x150%! \) \
\( mpr:img -gravity northeast -crop 10x10+0+0 +repage -resize 200x150%! \) \
+append \
\) \
\( \
\( mpr:img -gravity west -crop 10x100+0+0 +repage -resize 300x100%! \) \
\( mpr:img -gravity center -crop 100x100+0+0 +repage \) \
\( mpr:img -gravity east -crop 10x100+0+0 +repage -resize 200x100%! \) \
+append \
\) \
\( \
\( mpr:img -gravity southwest -crop 10x10+0+0 +repage -resize 300x150%! \) \
\( mpr:img -gravity south -crop 100x10+0+0 +repage -resize 100x150%! \) \
\( mpr:img -gravity southeast -crop 10x10+0+0 +repage -resize 200x150%! \) \
+append \
\) \
-append \
logo_result.png

结果:

如果使用 ImageMagick 7,则将 convert 更改为 magick。

如果在 Windows 上,将行结尾 \ 更改为 ^ 并从 ( 和 ) 中删除 \。如果在 .bat 文件中,将 % 加倍为 %%%。

使用 ImageMagick,您可以将其视为一系列独立的裁剪和调整大小操作。这是一个示例命令...

magick input.png -write mpr:img0 +delete ^
   ( mpr:img0 -gravity west -crop 10x+0+0 -resize 300x100% ) ^
   ( mpr:img0 -shave 10x0 ) ^
   ( mpr:img0 -gravity east -crop 10x+0+0 -resize 200x100% ) ^
   +append +repage -write mpr:img0 +delete ^
   ( mpr:img0 -gravity north -crop x10+0+0 -resize 100x150% ) ^
   ( mpr:img0 -shave 0x10 ) ^
   ( mpr:img0 -gravity south -crop x10+0+0 -resize 100x150% ) ^
   -append +repage result.png

此命令将从左侧和右侧取一个 10 像素宽的条带,将左侧加宽 300%,将右侧加宽 200%,然后将它们重新附加到中心。

然后从顶部和底部取一个 10 像素高的条带,将它们的高度调整为 150%,然后将它们重新附加到中心部分。

角落得到了适当的缩放,因为它们经过了水平和垂直大小调整操作。

该命令在 Windows CLI 语法中使用 IMv7。对于 Windows BAT 脚本,您需要将百分号“%%”加倍。

要使其在 *nix 系统上运行,请将续行插入符号“^”更改为反斜杠“\”并使用反斜杠“\(...\)”转义括号。

要将它与 IMv6 一起使用,请将“magick”更改为“convert”。