gpt4 book ai didi

imagemagick - 如何在 ImageMagick 中为边缘像素设置边框颜色

转载 作者:行者123 更新时间:2023-12-04 03:10:46 25 4
gpt4 key购买 nike

为了防止在我选择的图形引擎中缩放 Sprite 或在非完整像素上显示它们时出现伪影,我需要遍历所有 Sprite 并为每个 Sprite 添加一条边。边缘需要是相邻像素的颜色,就像这样:

Expected effect

左图为原图,右图为预期结果

在 ImageMagick 中可以实现这种效果吗?换句话说,可以将图像在所有四个方向上扩展一个像素,将边缘像素复制到新添加的边框中吗?

最佳答案

首先,您应该了解以下基本图像操作,它们将作为完整命令的构建 block :

  1. image.ext[NxM+x+y] 将从 image.ext 中剪切出一个 NxM 像素大小的区域从左上角计算,向右 +x 像素,向底部 +y 像素。
  2. +append 水平附加两张(或更多)图像。
  3. -append 垂直附加两个(或更多)图像。
  4. image.ext[1x+0+0] 切除图像中最左边的像素列。
  5. -flop 将从左到右镜像图像。
  6. -flip 将从上到下镜像图像。
  7. image.ext[x1+0+0] 剪切掉图像中最顶行的像素。
  8. image.ext[1x+0+0] 剪切掉图像中最左边的像素列。
  9. -crop NxM+x+y1. 相同。
  10. mpr:ABC 将使用标签 ABC 将图像写入 Magick Persistent Registry。从驻留在特殊内存位置的 MPR,ImageMagick 只需调用标签名称即可检索图像的副本。
  11. -delete 0 将从当前图像序列中删除索引为 0 的图像。
  12. +write 将在给定名称下写入图像序列。
  13. +repage 再次标准化图像 Canvas 。

现在您可以将 5.8. 结合使用以切出最右边的像素行:

-flop image.ext[1x+0+0]

您还可以将 6.7. 结合使用以切出最底部的像素列:

-flip image.ext[x1+0+0]

现在将这些效果与 括号 语法 \( ...\) 结合起来,以对完整命令的图像进行侧面处理:

convert image.png                     \
-respect-parentheses \
+write mpr:ABC \
-delete 0 \
\( mpr:ABC[1x+0+0] \) \
\( mpr:ABC \) \
\( mpr:ABC -flop -crop 1x+0+0 \) \
+append +repage \
+write mpr:XYZ \
-delete 0 \
\( mpr:XYZ[x1+0+0] \) \
\( mpr:XYZ \) \
\( mpr:XYZ -flip -crop x1+0+0 \) \
-append +repage \
extended-edges.png

将此应用于内置 rose: 图像:

convert rose:                         \
-respect-parentheses \
+write mpr:ABC \
-delete 0 \
\( mpr:ABC[1x+0+0] \) \
\( mpr:ABC \) \
\( mpr:ABC -flop -crop 1x+0+0 \) \
+append +repage \
+write mpr:XYZ \
-delete 0 \
\( mpr:XYZ[x1+0+0] \) \
\( mpr:XYZ \) \
\( mpr:XYZ -flip -crop x1+0+0 \) \
-append +repage \
extend.png

快速检查新图像的大小

identify rose: extend.png 
rose:=>ROSE PPM 70x46 70x46+0+0 8-bit sRGB 9.67KB 0.000u 0:00.000
extend.png[1] PNG 72x48 72x48+0+0 8-bit sRGB 7.11KB 0.000u 0:00.000

检查前两行像素是否相同

最顶行:

convert extend.png[x1+0+0] txt:- | md5sum
12b639cd1606559633ee23a062ae42a6 -

从上数第二行:

convert extend.png[x1+0+1] txt:- | md5sum
12b639cd1606559633ee23a062ae42a6 -

从上数第三行:

convert extend.png[x1+0+2] txt:- | md5sum
88fc6f9bac3f8ab4cbf2374fbef6fcf0 -

检查最左边的两列是否相同

最左边的列:

convert extend.png[1x+0+0] txt:- | md5sum
4d2223b74901f9ce1fb4456dacb4315c -

左起第二列:

convert extend.png[1x+1+0] txt:- | md5sum
4d2223b74901f9ce1fb4456dacb4315c -

左起第三列:

convert extend.png[1x+2+0] txt:- | md5sum
07794b4423f5b6515142d15a5c652743 -

我没有展示如何检查最底部的两行和最右侧的两列是否也相同...


还有一种方法可以通过-virtual-pixel edge操作达到同样的效果,但是比较难理解...

关于imagemagick - 如何在 ImageMagick 中为边缘像素设置边框颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com