【问题标题】:9-slice scaling with imagemagick?使用 imagemagick 进行 9 切片缩放?
【发布时间】:2021-06-24 12:25:19
【问题描述】:
给定尺寸为120x120 像素的输入图像,
我想使用 imagemagick 来执行
9-slice scaling.
- 将图像保持在由
左上坐标
(10,10)
和右下坐标(110,110)未缩放,
此中心部分为100x100 像素。
- 左侧按给定因子缩放,
比如说 3,所以这将从
10x100 像素变为 30x100 像素
- 按给定因子的右侧比例,
比如说 2,所以这将从
10x100 像素变为 20x100 像素
- 顶部和底部都按给定因子缩放,
比如说 1.5,所以这些将从
100x10 变为 100x15 每个。
- 四个角会缩放以适应新的顶部、右侧、底部和左侧的新尺寸。
类似的东西
(除了在我的例子中,中心元素“5”不需要改变)
如何使用 imagemagick 执行此操作?
(也欢迎对 Linux 上可用的任何其他 CLI 工具提出建议!)
【问题讨论】:
标签:
image-processing
imagemagick
image-scaling
【解决方案1】:
这是 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 文件中,将 % 加倍为 %%。
【解决方案2】:
使用 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”。