在修改后的原始图像上合成克隆 - 需要第二个克隆?
Composing clone over modified original image - needs second clone?
我有一张图片,我想在其周围放置一个白色边框,以覆盖原始图片。但是,与 之类的问题不同,我想用图像大小的 百分比 来完成。这意味着 -shave
然后 -border
不起作用,例如删除 10% 并将其添加回去会导致图像略小 (100 × 0.9 × 1.1 = 99)
所以,我的方法是-clone
图像,-shave
它,将原始图像设置为白色,然后将其组合在一起。
但是,我能够做到这一点的唯一方法是使用两个克隆(一个变白,一个刮胡子)然后 -delete
在合成之前对原始图像进行处理:
convert in.png -gravity center \
\( -clone 0 -evaluate set 100% \) \
\( -clone 0 -shave 10%x10% \) \
-delete 0 -composite out.png
这行得通,但我想知道如果没有第二个 -clone
和 -delete 0
我是否可以做到这一点。类似于以下内容(不起作用 - 输出为纯白色):
convert in.png -gravity center \
\( -clone 0 -shave 10%x10% \) \
-evaluate set 100% -composite out.png
您可以将 -extent
与代表原始几何体的 %G
一起使用,像这样将 "border inside" 设置为 Photoshop 调用它:
magick paddington.png -shave 10x10% -gravity center -background magenta -extent "%G" result.png
转换为:
进入这个:
为了完整性和将来的参考,您可以将"border outside"设置为原始宽度和高度的百分比,如下所示:
magick paddington.png -bordercolor yellow -border "10%" outside.png
这将在左侧和右侧增加原始宽度的 10%,在顶部和底部增加原始高度的 10%。如果您只想要 10 像素的绝对边框宽度,请省略百分号。
关键词:图像处理,ImageMagick,边框内,边框外。
如果您使用的是 ImageMagick v7,则可以使用“%G”之类的转义百分比来替代上述 Mark 描述的图像原始尺寸。如果您是 运行 IMv6,那么其中许多转义符和 FX 表达式都无法使用。在这种情况下,这是完成任务的另一种方法...
convert in.png -write mpr:img0 -evaluate set 100% \
\( mpr:img0 -shave 10% \) -gravity center -composite out.png
读取输入图像,将其副本存储在内存寄存器“mpr:img0”中,然后将输入图像变为白色。在括号内,它将内存副本带回并削减所有边缘的 10%。在括号之后,它合成以 all-white 图像为中心的剃须图像并写入输出。
编辑添加:
这里是link关于使用内存寄存器“mpr:”的信息。它通常可以用作减少克隆操作次数或修改当前图像列表顺序的方法...
这里是 link 有关 IM 逃逸百分比的更多信息...
已经提供了可接受的解决方案,但几乎总是有多种方法可以使用 ImageMagick 完成给定的任务。通常,根据特定的工作流程等,一种方法可能优于另一种方法。因此,这是另一种使用百分比而不是像素数将边界区域应用于图像的方法...
convert in.png -gravity center -crop 80x80%+0+0 -flatten out.png
这会在水平和垂直方向将中心裁剪掉 80%,实质上是从每一侧移除 10%。因此,百分比不是将边界描述为输入图像的百分比,而是描述保留在边界内的图像。
裁剪后的图像保持其原始尺寸和偏移数据,因此“-flatten”会将图像放回其原始位置 canvas 的原始尺寸。
由于 IM 的默认背景颜色为白色,因此新边框将为白色。在展平之前使用-background somecolor
来改变它。
此命令在 IMv6 中。它应该与使用“magick”而不是“convert”的 IMv7 相同。
我有一张图片,我想在其周围放置一个白色边框,以覆盖原始图片。但是,与 -shave
然后 -border
不起作用,例如删除 10% 并将其添加回去会导致图像略小 (100 × 0.9 × 1.1 = 99)
所以,我的方法是-clone
图像,-shave
它,将原始图像设置为白色,然后将其组合在一起。
但是,我能够做到这一点的唯一方法是使用两个克隆(一个变白,一个刮胡子)然后 -delete
在合成之前对原始图像进行处理:
convert in.png -gravity center \
\( -clone 0 -evaluate set 100% \) \
\( -clone 0 -shave 10%x10% \) \
-delete 0 -composite out.png
这行得通,但我想知道如果没有第二个 -clone
和 -delete 0
我是否可以做到这一点。类似于以下内容(不起作用 - 输出为纯白色):
convert in.png -gravity center \
\( -clone 0 -shave 10%x10% \) \
-evaluate set 100% -composite out.png
您可以将 -extent
与代表原始几何体的 %G
一起使用,像这样将 "border inside" 设置为 Photoshop 调用它:
magick paddington.png -shave 10x10% -gravity center -background magenta -extent "%G" result.png
转换为:
进入这个:
为了完整性和将来的参考,您可以将"border outside"设置为原始宽度和高度的百分比,如下所示:
magick paddington.png -bordercolor yellow -border "10%" outside.png
这将在左侧和右侧增加原始宽度的 10%,在顶部和底部增加原始高度的 10%。如果您只想要 10 像素的绝对边框宽度,请省略百分号。
关键词:图像处理,ImageMagick,边框内,边框外。
如果您使用的是 ImageMagick v7,则可以使用“%G”之类的转义百分比来替代上述 Mark 描述的图像原始尺寸。如果您是 运行 IMv6,那么其中许多转义符和 FX 表达式都无法使用。在这种情况下,这是完成任务的另一种方法...
convert in.png -write mpr:img0 -evaluate set 100% \
\( mpr:img0 -shave 10% \) -gravity center -composite out.png
读取输入图像,将其副本存储在内存寄存器“mpr:img0”中,然后将输入图像变为白色。在括号内,它将内存副本带回并削减所有边缘的 10%。在括号之后,它合成以 all-white 图像为中心的剃须图像并写入输出。
编辑添加:
这里是link关于使用内存寄存器“mpr:”的信息。它通常可以用作减少克隆操作次数或修改当前图像列表顺序的方法...
这里是 link 有关 IM 逃逸百分比的更多信息...
已经提供了可接受的解决方案,但几乎总是有多种方法可以使用 ImageMagick 完成给定的任务。通常,根据特定的工作流程等,一种方法可能优于另一种方法。因此,这是另一种使用百分比而不是像素数将边界区域应用于图像的方法...
convert in.png -gravity center -crop 80x80%+0+0 -flatten out.png
这会在水平和垂直方向将中心裁剪掉 80%,实质上是从每一侧移除 10%。因此,百分比不是将边界描述为输入图像的百分比,而是描述保留在边界内的图像。
裁剪后的图像保持其原始尺寸和偏移数据,因此“-flatten”会将图像放回其原始位置 canvas 的原始尺寸。
由于 IM 的默认背景颜色为白色,因此新边框将为白色。在展平之前使用-background somecolor
来改变它。
此命令在 IMv6 中。它应该与使用“magick”而不是“convert”的 IMv7 相同。