ImageMagick 示例 --
蒙太奇,图像数组
- 索引
-
ImageMagick 示例前言和索引
-
蒙太奇,简介和概述
-
蒙太奇设置
-
图像目录索引
- HTML 缩略图图像地图(基本索引地图)
- 使用 JPEG 图像的较小 HTML 索引地图
- 视觉索引(非蒙太奇解决方案)
- 拍立得照片的蒙太奇(一个花哨的索引地图)
-
使用蒙太奇的特殊技巧
magick montage
” 的最初用途是生成图像缩略图表,即引用大型图像集合(尤其是照片)的缩略图。虽然它仍然可以用于此目的,但它还可以做更多的事情。此页面介绍了您可以使用蒙太奇做什么以及如何在自己的图像上使用它。蒙太奇,简介
“magick montage
” 命令旨在生成一系列缩略图图像。有点像大型图像集合的校样。默认的“magick montage
”(没有选项)非常简单,包含相当大的容器正方形,没有框架、标签或阴影。
几何 - 磁贴大小和图像调整大小
“-geometry
” 设置是“magick montage
” 最重要的控制项。它定义了各个缩略图图像的大小以及它们之间的间距。几何图形的大小部分用作 调整大小运算符 的参数,包括其所有特殊用途标志。选项的位置部分被解释为要在图像周围留出的边框空间量,因此将其缩小将使图像之间的间隙缩小。默认的“-geometry
” 设置为“120x120>+4+3
”,这意味着将给定的任何图像都放入一个 120x120 像素大小的框中。如果图像较大则缩小它,但不要调整较小图像的大小(根据 仅缩小较大图像('>')标志)。然后将“磁贴”大小设置为所有调整大小的图像的最大尺寸和实际指定的尺寸。这意味着您永远不会获得小于指定的“-geometry
” 大小的磁贴大小。您可以通过修改“-geometry
” 默认值来删除上一个示例空间中磁贴的巨大尺寸。例如,通过删除“大小”组件,将不会调整任何图像的大小,并且“磁贴”大小将设置为所有给定图像的最大尺寸。例如,这里我要求蒙太奇使用给定的最大图像进行平铺,并在磁贴之间留出一个小间隙。当所有输入图像都较小且大小大致相同时的典型设置。例如,这里我用一个更大的“徽标”图像替换了一个图像,但将调整大小设置设置为“48x48
” 以调整较小和较大图像的大小。
magick montage balloon.gif medical.gif present.gif logo: \ -geometry 48x48+2+2 montage_geom_size.jpg |
![[IM Output]](montage_geom_size.jpg)
magick montage balloon.gif medical.gif present.gif logo: \ -geometry 48x48\>+2+2 montage_geom_larger.jpg |
![[IM Output]](montage_geom_larger.jpg)
1x1<
”),它指示 IM 仅将较小图像调整为给定大小。由于没有图像可以小于 1 像素,因此不会调整任何图像的大小。因此,磁贴大小将再次成为页面上所有图像的最大尺寸。有关您可能希望执行此操作的原因,请参阅 零几何,谨慎使用。几何 - 磁贴间距
“-geometry
” 设置的位置部分将通过在 附加 它们之前在磁贴周围添加这些尺寸的 边框 来在各个“磁贴”之间添加空间。这意味着对于默认的“-geometry
” 设置“+4+3
”,磁贴将从最终图像的左右边缘间隔 4 像素,并且在磁贴之间将有 8 像素(给定大小的两倍)的水平间距。垂直间距也是如此。请注意,当所有图像都调整大小(倒数第二个示例)时,磁贴之间的空间是边缘周围空间的两倍。磁贴布局控制
“magick montage
” 中的下一个最重要的选项是“-tile
” 设置。这告诉蒙太奇您希望对最终结果上平铺图像的布局方式施加什么限制。在 ImageMagick 版本 6 中,“magick montage
” 将对如何最好地平铺给定数量的图像进行推测,当您没有提供“-tile
” 提示时。但是,它假设被平铺的图像本质上大致是方形的,因为它在决定要使用的平铺时不会查看图像的纵横比。
magick montage font_1.gif -geometry 16x16+1+1 tile_1.gif magick montage font_[12].gif -geometry 16x16+1+1 tile_2.gif magick montage font_[123].gif -geometry 16x16+1+1 tile_3.gif magick montage font_[1-4].gif -geometry 16x16+1+1 tile_4.gif magick montage font_[1-5].gif -geometry 16x16+1+1 tile_5.gif magick montage font_[1-6].gif -geometry 16x16+1+1 tile_6.gif magick montage font_[1-7].gif -geometry 16x16+1+1 tile_7.gif magick montage font_[1-8].gif -geometry 16x16+1+1 tile_8.gif magick montage font_[1-9].gif -geometry 16x16+1+1 tile_9.gif magick montage font_[0-9].gif -geometry 16x16+1+1 tile_0.gif |
![[IM Output]](tile_1.gif)
![[IM Output]](tile_2.gif)
![[IM Output]](tile_3.gif)
![[IM Output]](tile_4.gif)
![[IM Output]](tile_5.gif)
![[IM Output]](tile_6.gif)
![[IM Output]](tile_7.gif)
![[IM Output]](tile_8.gif)
![[IM Output]](tile_9.gif)
![[IM Output]](tile_0.gif)
![]() ![]() |
奇怪的“[1-5] ” 语法是 UNIX shell 的简写,它扩展为文件名列表。“magick montage ” 命令本身看不到这些字符,只看到生成的 文件列表。 |
-tile
” 设置。下表列出了输入图像的数量和 IM 将用于布局这些图像的磁贴设置。
|
|
|
-tile
” 设置,蒙太奇将始终创建一个足够大的图像来容纳这么多“磁贴”。
magick montage font_[1-7].gif -tile 9x1 -geometry 16x16+1+1 tile_9x1.gif magick montage font_[1-7].gif -tile 4x3 -geometry 16x16+1+1 tile_4x3.gif magick montage font_[1-7].gif -tile 3x3 -geometry 16x16+1+1 tile_3x3.gif magick montage font_1.gif -tile 2x3 -geometry 16x16+1+1 tile_2x3.gif |
![[IM Output]](tile_9x1.gif)
![[IM Output]](tile_4x3.gif)
![[IM Output]](tile_3x3.gif)
![[IM Output]](tile_2x3.gif)
![]() ![]() |
在 IM v6.1 之前,如果图像数量未使用该空间,蒙太奇会自动截断多余的空间。因此,诸如第一个“9x1”图像之类的设置将被截断以生成“7x1”磁贴图像。
因此,蒙太奇的过去用户经常使用诸如“999x1”之类的数字来生成一行图像。现在,这样的参数将生成一个非常长的图像,并且 IM 可能需要很长时间才能完成。因此…… |
-tile
” 设置中删除一行或列号。蒙太奇将把缺失的数字视为可变的,并且蒙太奇只会创建足够的空间来容纳所有输入图像,从而只生成一个图像,而不是多个图像。
magick montage font_[1-7].gif -tile x1 -geometry 16x16+1+1 tile_x1.gif magick montage font_[1-7].gif -tile x2 -geometry 16x16+1+1 tile_x2.gif magick montage font_[1-7].gif -tile x4 -geometry 16x16+1+1 tile_x4.gif magick montage font_[1-7].gif -tile 4x -geometry 16x16+1+1 tile_4x.gif magick montage font_[1-7].gif -tile 5x -geometry 16x16+1+1 tile_5x.gif magick montage font_[1-7].gif -tile 9x -geometry 16x16+1+1 tile_9x.gif |
![[IM Output]](tile_x1.gif)
![[IM Output]](tile_x2.gif)
![[IM Output]](tile_x4.gif)
![[IM Output]](tile_4x.gif)
![[IM Output]](tile_5x.gif)
![[IM Output]](tile_9x.gif)
-tile
” 设置更典型的用法,因为它确保蒙太奇大小正确,同时仍然允许它在确定最终数组大小时具有一定的控制权。请注意上面最后一个图像,我们请求了 9 列图像。即使给定的图像少于 9 个,IM 仍然生成了请求的 9 列。另一方面,第一个图像(请求一行)正好具有容纳所有图像的正确长度。如果您提供的输入图像多于蒙太奇可以平铺到“-tile
” 设置给定的空间中的数量,则蒙太奇可以生成多个图像,要么导致图像序列号添加到文件名中,要么创建某种 GIF 动画。有关详细信息,请参阅 写入多个图像。例如,这里我要求蒙太奇为生成的每个页面保存单独的图像,方法是为每个图像文件名提供“%d
” 以表示帧/场景/页码。
框架装饰
使用蒙太奇排列图像的最佳部分是它提供了许多额外的控制项来在每个图像周围添加额外的“绒毛”。例如,您可以通过在每个图像周围添加“-frame
” 来更好地定义显示的图像。
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -frame 5 -geometry +5+5 frame.jpg |
![[IM Output]](frame.jpg)
magick
” 中的相同选项不同(请参阅 添加 3D 框架 示例)。蒙太奇框架选项将自动为框架的内部和外部斜角计算默认值。因此,只需要一个参数数字。边框装饰
大约在 IM v6.1.0 左右,“-border
” 成为蒙太奇的一个新的装饰选项。它现在在根据“-geometry
” 设置调整图像大小后,在每个图像周围添加额外的“填充”。
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -border 5 -geometry +5+5 border.jpg |
![[IM Output]](border.jpg)
![]() ![]() |
当也应用了 框架装饰 时,“-border ” 装饰当前不起作用。 |
![]() ![]() |
在 IM v6.1.0(大约)之前,“-border” 将应用于“magick montage ” 命令行中出现的图像,就像它在“magick ” 中一样。也就是说,边框将在图像根据“ -geometry ” 调整大小之前很久就添加到图像中,这会导致每个图像周围的边框宽度不同,具体取决于该点图像的大小。正是为了消除这种不一致性,“-border成为一个特殊的蒙太奇设置。 |
阴影装饰
使用框架添加阴影也非常好。
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -frame 5 -shadow -geometry +5+5 frame_shadow.jpg |
![[IM Output]](frame_shadow.jpg)
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -shadow -geometry +5+5 -background lightblue \ shadow_noframe.jpg |
![[IM Output]](shadow_noframe.jpg)
|
![]() |
-geometry
" 间距。因此,如果图像过于靠近,则前面图像的阴影可能会被后面的图像遮挡。例如……
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -shadow -geometry +1+1 -background none \ shadow_spacing.png |
![[IM Output]](shadow_spacing.png)
-geometry
" 间距。为了避免“边缘裁剪”阴影过多,"-shadow
" 选项将在最终图像的右侧和下边缘添加 4 个额外的边缘间距像素。这在正常提供的"-geometry
" 间距之上。但是如您所见,这并不总是足够的空间。蒙太奇目前也不提供对生成的阴影的偏移量、颜色或“柔和度”的控制(至少目前还没有),但是,您在旧版本的蒙太奇提供的硬矩形阴影中也没有这样的控制。标记蒙太奇图像
您还可以告诉蒙太奇使用其源文件名标记图像,尽管您可能需要调整图像帧的大小,否则标签可能不合适,从而截断文本标签。在这种情况下,我们在几何字符串中添加了“60x60>
”,它告诉 IM 将较大的图像缩小以适合此空间,但不放大较小的图像。这可能是蒙太奇最典型的用法。
magick montage -label '%f' balloon.gif medical.gif rose: present.gif shading.gif \ -tile x1 -frame 5 -geometry '60x60+4+4>' label_fname.jpg |
![[IM Output]](label_fname.jpg)
%f
”是一个特殊的格式字符,它可以提取内存中图像的各种详细信息。有关可以从图像中提取的其他信息的详细信息,请参阅图像属性转义。在标记缩略图时,您不必使用“-frame
” 。标签没有阴影,因此它们保持清晰易读。
montage -label '%f' balloon.gif medical.gif logo: present.gif shading.gif \ -tile x1 -shadow -geometry '60x60+2+2>' label_shadow.jpg |
![[IM Output]](label_shadow.jpg)
-set
”图像属性操作符在读取图像后重新标记图像。让我们使用“-set
”操作符添加有关图像的更多信息。以及一些其他的蒙太奇设置……
magick montage balloon.gif medical.gif logo: present.gif shading.gif \ -tile x1 -geometry '90x32+2+2>' -pointsize 10 \ -set label '%f\n%wx%h' -background SkyBlue label_fname3.jpg |
![[IM Output]](label_fname3.jpg)
-label
”设置来定义图像读取时的默认标签,或者您可以在之后使用“-set
”操作符重新标记图像。![]() ![]() |
请注意,“%wx%h ”给出图像在内存中的当前像素宽度和高度。如果图像大小被修改,例如在输入期间,这可能与磁盘(或创建)中的图像大小不同。如果您想要其内存中的像素大小,请使用“%[width]x%[height] ”。 |
-set
”操作符将应用于哪些图像。例如,这里我们使用了两种标记形式。但让我们也为蒙太奇添加一个标题,因为我们可以……
magick montage -label Balloon balloon.gif \ -label Medical medical.gif \ \( present.gif -set label Present \) \ \( shading.gif -set label Shading \) \ -tile x1 -frame 5 -geometry '60x60+2+2>' \ -title 'My Images' titled.jpg |
![[IM Output]](titled.jpg)
-label ''
”或“+label
”关闭下一个图像的图像标记。但是,如您将在后面看到,这两个设置并不完全相同。对于读取后的标签“-set
”操作也适用。
magick montage balloon.gif \ -label 'My Image' medical.gif \ +label present.gif \ -label ' ' shading.gif \ -tile x1 -frame 5 -geometry '60x60+2+2>' labeling.jpg |
![[IM Output]](labeling.jpg)
要么标记所有图像,要么不标记任何图像!
您不必在蒙太奇操作本身期间标记图像。MIFF 和 PNG 格式都可以将标签存储为其图像格式的一部分。蒙太奇将自动标记任何已包含标签的读取图像。这是自动的,不需要指定,我使用此技术生成了一些非常复杂的图像蒙太奇。例如,注释角度示例中的蒙太奇数组就是使用此技术创建的。如果您不希望此自动标记,则必须明确告诉蒙太奇在读取图像之前使用“-label ''
”将所有读取或创建的标签重置为空字符串。或者,您可以在读取图像后使用“+set label
”删除标签元数据。这就是“+label
”与使用空标签(“-label ''
”)的不同之处。前者会将默认行为重置为自动使用读取的图像可能具有的任何标签元数据,而后者则用空字符串替换标签,从而有效地删除标签。您还可以使用“-label '%l'
”保留图像的原始标签,这在图像处理脚本中可以用作 NO-OP 标记选项。请注意,“-set
”无法恢复图像的原始标签,一旦它被修改或删除,无论是使用“-label
”还是“-set
”
magick -label 'medical' medical.gif label_medical.png magick -label 'logo' logo: label_logo.png magick -label 'rose' rose: label_rose.png magick montage label_medical.png \ -label '' label_logo.png \ +label label_rose.png \ -tile x1 -frame 5 -geometry '60x60+2+2>' label_control.jpg |
![[IM Output]](label_control.jpg)
-label ''
”设置删除,而第三个图像也使用了图像标签,因为我们使用“+label
”关闭了标签设置。使用已保存的图像元数据
在为以后由蒙太奇使用生成图像时,了解特定图像文件格式可以保存哪种图像元数据非常重要。例如,只有 PNG 和 MIFF 图像文件格式才能实际将其保存的图像文件格式中存储“label
”元数据……
magick -label 'GIF' balloon.gif label.gif magick -label 'JPG' medical.gif label.jpg magick -label 'PNG' present.gif label.png magick -label 'MIFF' shading.gif label.miff montage label.gif label.jpg label.png label.miff \ -tile x1 -frame 5 -geometry '60x60+2+2>' label_files.jpg rm label.* |
![[IM Output]](label_files.jpg)
comment
”元数据,您可以通过为“-label
”指定“%c
”参数来使用它。
magick -comment 'GIF' balloon.gif comment.gif magick -comment 'JPG' medical.gif comment.jpg magick -comment 'PNG' present.gif comment.png magick -comment 'MIFF' shading.gif comment.miff magick montage -label '%c' comment.gif comment.jpg comment.png comment.miff \ -tile x1 -frame 5 -geometry '60x60+2+2>' comment_files.jpg rm comment.* |
![[IM Output]](comment_files.jpg)
caption
”元数据。
magick balloon.gif -set caption 'GIF' caption.gif magick medical.gif -set caption 'JPG' caption.jpg magick present.gif -set caption 'PNG' caption.png magick shading.gif -set caption 'MIFF' caption.miff magick montage -label '%[caption]' caption.gif caption.jpg caption.png caption.miff \ -tile x1 -frame 5 -geometry '60x60+2+2>' caption_files.jpg rm caption.* |
![[IM Output]](caption_files.jpg)
magick balloon.gif -set my_data 'GIF' my_data.gif magick medical.gif -set my_data 'JPG' my_data.jpg magick present.gif -set my_data 'PNG' my_data.png magick shading.gif -set my_data 'MIFF' my_data.miff magick montage -label '%[my_data]' my_data.gif my_data.jpg my_data.png my_data.miff \ -tile x1 -frame 5 -geometry '60x60+2+2>' my_data_files.jpg rm my_data.* |
![[IM Output]](my_data_files.jpg)
在蒙太奇中留出间隙
虽然您可以通过明智地使用“-tile
”设置并控制给定的图像数量来在蒙太奇底部留下额外的空间,但在蒙太奇中间留下空的磁贴空间需要使用特殊的图像。“null:
”生成的图像专门为此目的而定义。它出现的那个位置不会收到任何标签(即使定义了标签),也不会添加任何框架或阴影“绒毛”。该磁贴完全留空,除了蒙太奇绘图画布本身的背景颜色(或纹理)之外。
magick montage -label 'Image' medical.gif null: present.gif \ -tile x1 -frame 5 -geometry +2+2 montage_null.jpg |
![[IM Output]](montage_null.jpg)
null:
”图像表示为单个像素透明图像。它也用作“错误图像”,用于诸如“-crop
”或“-trim
”之类的选项,这些选项可能会产生“零”或空图像作为操作的结果。此特殊图像无法保存然后以后使用以留下空白,目前只有在“magick montage
”的命令行上给出时,它才是“特殊的”。![]() ![]() |
目前没有方法允许蒙太奇图像跨越多行或多列,就像您在 HTML 表格中那样。您也不能生成可变大小的行和列以最佳方式适应正在生成的图像数组。 如果您确实需要这种功能,则需要开发自己的蒙太奇类型应用程序。如果您确实开发了一些内容,请贡献出来,我们会考虑将其合并到现有的蒙太奇应用程序中。 一些解决方案包括自己标记和加框图像缩略图,然后使用附加图像或使用更自由形式的分层图像技术。 |
更多蒙太奇设置
我上面显示的“magick montage
”设置只是蒙太奇的基本控制。对于您自己的需求,您可能需要考虑许多其他设置。 蒙太奇颜色设置
-background |
绘制框架之外的颜色。通常将其设置为“none ”或“transparent ”,用于网页。如果给出,则将使用-texture设置。 |
-bordercolor |
图像框架或任何边框填充内的填充颜色。图像中的任何透明区域都将变成此颜色,除非没有添加此类装饰。 |
-mattecolor |
用作框架颜色的颜色。请注意,颜色也会变亮和变暗,以使框架具有斜面 3D 外观。因此,此设置实际上定义了 5 种颜色。(另请参阅加框图像) |
-fill |
文本标签和标题的填充颜色。 |
-stroke |
文本标签和标题的描边颜色。 |
蒙太奇控制设置
"
-tile {cols}x{rows}
- 用于填充单个蒙太奇图像的图像横向和纵向数量。如果读取或创建的图像数量超过单个蒙太奇图像可以容纳的数量,则将创建多个图像。(请参阅上面的磁贴控件)
-title {string}
- 使用与用于标记单个图像相同的字体(但更大)在整个蒙太奇上设置标题。
-frame {宽度}
- 在包含图像的方框周围创建一个边框,使用提供的宽度(必须至少为 2,但 5 或 6 是一个好的值)。如果使用,图像中的任何透明度也将成为边框颜色。
-border {宽度}
- 在图像周围创建一个边框,使用提供的宽度。如果使用,图像中的任何透明度也将成为边框颜色。
-shadow
- 生成边框的阴影。请注意,不需要或不需要任何参数。
-texture {文件名}
- 使用给定的纹理(平铺图像)作为背景,而不是特定的颜色。有关更多信息,请参见下面关于背景和透明度的部分。
-geometry {W}x{H}+{X}+{Y}
- 在将所有图像读取并蒙太奇叠加到画布上后,调整图像大小。它还定义了图像绘制到的图块的大小和间距。如果未指定大小,则图像将不会调整大小。
-gravity {方向}
- 如果图像小于边框,则图像将在边框中的哪个位置放置。默认情况下,它位于中心。
label:
"图像创建运算符理解的所有字体设置(参见标签图像生成器)。这些设置用于创建添加到显示图像下方的标签。这些包括“-font
”,“-pointsize
”(对于“-title
”忽略),“-density
”,“-fill
”,“-stroke
”和“-strokewidth
”等设置。只要在最终的“输出文件名”参数之前定义或重置了任何或所有上述设置,蒙太奇就会按您的要求使用它们。 重复使用图像读取/创建设置
但是请注意,许多这些选项也用于其他目的,无论是在图像生成中还是在图像处理过程中。但由于 IM v6 上的“按您所见进行操作”命令行处理,这对“magick montage
”命令没有任何问题。这意味着您可以自由地使用任何这些选项设置来读取、创建或修改正在读取的图像,然后在所有图像读取或创建后重置这些设置。最终的设置值将是蒙太奇用于其最终处理的值。在 IM v6 之前的版本中情况并非如此,在这些版本中,通常不可能将图像创建设置与蒙太奇设置分开,而无需生成中间图像(如上面的图像标签示例中)。这是一个重复使用设置的实用示例。我想制作一个我一直在这些示例页面中使用的某些字体的表格,然后将设置重置为其他值,以便蒙太奇最终处理图像。 magick montage -pointsize 24 -background Lavender \ -font Candice -label Candice label:Abc-123 \ -font Corsiva -label Corsiva label:Abc-123 \ -font SheerBeauty -label SheerBeauty label:Abc-123 \ -font Ravie -label Ravie label:Abc-123 \ -font Arial -label Arial label:Abc-123 \ -font ArialI -label ArialI label:Abc-123 \ -font ArialB -label ArialB label:Abc-123 \ -font ArialBk -label ArialBk label:Abc-123 \ -font CourierNew -label CourierNew label:Abc-123 \ -font LokiCola -label LokiCola label:Abc-123 \ -font Gecko -label Gecko label:Abc-123 \ -font Wedgie -label Wedgie label:Abc-123 \ -font WebDings -label WebDings label:Abc-123 \ -font WingDings -label WingDings label:Abc-123 \ -font WingDings2 -label WingDings2 label:Abc-123 \ -font Zymbols -label Zymbols label:Abc-123 \ \ -frame 5 -geometry +2+2 -font Arial -pointsize 12 \ -background none -bordercolor SkyBlue -mattecolor DodgerBlue \ montage_fonts.gif |
![[IM Output]](montage_fonts.gif)
magick montage
”命令的两个阶段。我用一个几乎空的额外行清楚地标记了它们。第一部分基本上与您使用正常的 IM“magick
”命令定义多个图像完全相同,并且按照相同的“按您所见进行操作”顺序进行处理。第二部分定义了我想让“magick montage
”命令本身使用的所有设置。也就是说,我想在最终的蒙太奇图像中使用的框架、图像大小调整、字体和颜色。我特别注意重置“-font
”和“-pointsize
”设置,用于蒙太奇图像下方的标签。虽然您可以像这样分离“magick montage
”的选项,但实际上可以在命令行上的任何时间定义蒙太奇设置。只要这些设置不干扰您的图像创建和处理选项,并且在命令行结束时仍然正确定义,则“magick montage
”将使用它们。附注:您可能想查看我编写的执行类似于上述操作的 shell 脚本(并且与早期版本的蒙太奇一起使用)以显示 truetype (.ttf) 字体的目录,名为“show_fonts
”。另一个 shell 脚本示例是“show_colors
”。蒙太奇与 Magick 选项差异
现在,虽然“magick montage
”通常允许您在读取和处理其输入图像时使用任何“magick
”设置和运算符,但有一些差异需要突出显示。这些“magick
”运算符和设置在“magick montage
”中使用时有所不同。如果您确实需要使用这些选项的“
-tile
- 在“
magick
”中,“-tile
”设置定义要用作纹理的图像,而不是使用“-fill
”颜色。在“magick montage
”中,它定义了如何布局各个图像单元“图块”。有关更多详细信息,请参见上面的图块布局控件。-frame
- 在“
magick
”中,这是一个用于在图像周围添加 3D 框架边框的操作符,并且需要 4 个参数才能正确工作(参见转换框架示例)。有关更多详细信息,请参见框架装饰。-border
- 大约在 IM v6.1.0 左右,此运算符成为一个特殊的蒙太奇选项。因此,与之前的框架选项一样,它只接受一个数字作为参数,而不是像转换边框那样接受两个参数。有关更多详细信息,请参见边框装饰。
-shadow
- “
magick
”中的“-shadow
”选项接受一个参数,该参数用于创建模糊阴影,可以在第二个原始图像副本下放置该阴影。但是,在“magick montage
”中,这只是一个布尔设置,仅用于打开和关闭矩形阴影功能。有关更多详细信息,请参见阴影装饰。-geometry
- “
magick montage
”中的“-geometry
”选项仅用于提供最终蒙太奇中每个单元格内图像的大小以及单元格之间的间距。在“magick
”中,它仅调整最后一个图像的大小,并设置图像合成的偏移量。
magick
”形式,则需要使用“magick
”预处理图像,然后再将它们传递给“magick montage
”。上面图像标签示例中演示了一种使用中间文件的方法。另一种方法是只在“magick
”中执行处理,并将生成的多个图像管道输出到“magick montage
”。如果您始终首先处理图像输入,然后设置“magick montage
”特定的设置,例如我在所有这些示例中所做的那样,则这种分离很容易实现。这在上面最后一个字体示例中尤其突出。例如,让我们使用“magick
”框架为图像添加框架,然后使用“magick montage
”标记的框架再次为它们添加框架。
magick -label %f balloon.gif medical.gif present.gif shading.gif \ -mattecolor peru -frame 10x5+3+0 miff:- |\ magick montage - -tile x1 -frame 5 -geometry '64x56+5+5>' double_frame.jpg |
![[IM Output]](double_frame.jpg)
magick
”形式的“-frame
”运算符所需的额外参数。图像目录索引
HTML 缩略图图像地图
蒙太奇专门设计用于生成图像的缩略图地图。例如,我在这里创建了照片图像源目录的索引,该目录包含在整个 IM 示例中用作示例的数字照片。单击下面的“艺术”图像以查看结果。
|
![]() IM 示例 照片商店 |
![]() ![]() |
请注意使用“%[width]x%[height] ”而不是“%wx%h ”。这很重要,因为图像在读取时正在调整大小。前者将使用其在磁盘上的原始像素大小标记图像,而后者将使用图像的当前调整大小的大小。这是用户很容易忽略的事情。 |
当然,如果您只需要索引图像,则不必生成 HTML 索引文件。在这种情况下,只需将上面命令中的“
photo_index.png
所有图像缩略图的蒙太奇 photo_index_map.shtml
缩略图图像的 HTML“图像地图” photo_index.html
万维网的 HTML 缩略图索引页面。
这也包含先前图像地图的副本。
INDEX.html
”替换为您要生成的图像即可。请注意使用图像属性转义“%t
”作为图像“-label
”。这是没有任何“路径”组件的图像文件名。尽管 HTML 链接仍将包含适当的“路径”组件,允许您在与图像本身不同的目录中构建索引图像。上面示例中的源图像“'*_orig.*'
”被引用,因此“magick montage
”命令本身执行“*”的扩展,而不是命令行 shell。这避免了您可能遇到的任何命令行长度限制。此外,我在读取图像时还进行了一些初始图像大小调整“[120x190]
”(参见读取图像修改器)。对于 JPEG 图像,我还指定了一个较小的“-size
”设置,以便 JPEG 库可以进行一些非常粗略的初始缩放,并且不会将整个图像读入内存。如果不这样做,则非常大的 JPEG 图像可能会消耗大量内存和 CPU 周期,而实际上没有必要。我还“-strip
”图像可能具有的任何配置文件。有关更多信息,请参见配置文件、剥离和 JPEG 处理和读取 JPEG 图像。请记住,蒙太奇“-geometry
”选项也可以指定最终的大小调整设置,但在这种情况下,由于我在读取过程中已经进行了大小调整,因此不需要它,所以我没有在该设置中设置任何“大小”。最后,“5x
”的蒙太奇“-tile
”选项用于确保所有图像都显示在单个图像中,否则“magick montage
可能生成多页 HTML 文件,这些文件未正确链接在一起。希望这种情况会发生变化,尽管 HTML 生成不是 ImageMagick 的主要目标。有关生成缩略图和 HTML 索引页面的其他方法,请阅读缩略图示例页面。
使用 JPEG 图像的较小 HTML 索引地图
以上索引图像生成了一个 PNG 格式的索引图像。之所以使用 PNG 格式,是因为它是一种无损格式,当被索引的图像颜色差异很大时,这一点非常重要。如果背景颜色设置为“transparent
”或“none
”,它还可以使用 montage 的新“软阴影”功能。非常旧版本的 IM 会为以上内容生成 GIF 图像。但是,由于格式的限制,这会导致结果的颜色大幅减少。它也不允许使用 PNG 允许的半透明“软阴影”。JPEG 也不允许半透明,但如果您不使用透明背景,则这不是问题。然而,JPEG 的体积比 PNG 小得多,这提供了一种大幅减小索引图像大小的方法,尤其是在网页使用场景下,并且仍然可以处理大量颜色。但是,上面的 HTML 输出只生成 PNG 格式的图像,因此您不仅需要将 PNG 转换为 JPEG,还需要进行一些额外的处理来修复 HTML 文件。
|
![]() IM 示例 照片商店 |
- 首先,我像之前一样生成一个 montage 缩略图 HTML 索引。这生成了以下文件:“
photo_jpeg.html
”和“photo_jpeg.png
” - 然后,我将 PNG 图像转换为更小、有损的 JPEG 图像。
- 然后,我使用了一个简单的“
perl
”单行脚本将 HTML 文件修改为使用 JPEG 图像而不是 PNG 图像。 - 最后,我删除了 PNG 图像以及我不需要的 SHTML 映射文件。
视觉索引图像(非 montage 解决方案)
除了使用 montage 之外,还可以使用特殊的“视觉索引”输入格式...
|
![]() 视觉索引 照片商店 |
|
![]() 视觉 HTML 照片商店 |
VID:
”在内部使用 montage 生成索引数组。但是,您无法像直接使用 montage 时那样拥有相同的控制权。请注意,VID HTML 索引会创建一个 PNG 格式的缩略图图像。 拍立得照片的蒙太奇
随着复杂拍立得变换的出现,现在可以生成截然不同的蒙太奇和蒙太奇索引样式。
|
![]() 拍立得 蒙太奇 |
+polaroid
”来为图像添加边框和标签,因此我需要自己调整图像大小(使用“-thumbnail
”),并确保在实际创建“magick montage
”索引数组之前已重置“-background
”和图像“-label
”。但是,拍立得变换在向缩略图图像添加“卷曲”效果时往往会使文本变得模糊。但是,您可以通过生成更大尺寸的拍立得图像,然后将结果缩小 50% 来改善整体效果。唯一的缺点是“阴影”效果减弱了。
|
![]() 更清晰 拍立得 蒙太奇 |
photo_store
”目录中生成蒙太奇缩略图索引。有关此脚本的结果,请参见照片商店索引。使用蒙太奇的特殊技巧
蒙太奇成列
默认情况下,“magick montage
”只能按照给定的顺序(通常是排序顺序)逐行放置图像。但是,有时您希望按列显示它们。这无法通过单个命令完成,需要至少两个命令的管道。例如,这里我生成一个 5x3 图块的页面,使用两个蒙太奇。
|
![]() |
magick montage
”创建了图块并执行了所需的任何几何图块大小调整、边框、标签和间距。然后它将为每一列图块输出一个图像。第二个“magick montage
”然后简单地将列连接成“页面”图像,而不会在列之间添加更多间距。如果您只需要一个包含可变列数的单个图像,则可以使用“magick
”替换第二个“magick montage
”来连接,而不会添加“页面”的额外间距。例如...
|
![]() |
重叠的蒙太奇磁贴
在IM 用户论坛中,在Fred Weinhaus(又名fmw42)和另一位用户pooco之间的讨论中,人们发现,如果将图块间间距(在“-geometry
”设置中设置)设置为负数,则实际上可以将绘制图像的图块区域重叠。例如,这里我们使用负水平图块间间距,用于一行图像。旋转图像将使重叠序列更加有趣...
magick montage null: font_*.gif null: -background none -rotate 30 \ -background white -tile x1 -geometry -8+2 montage_rot_overlap.jpg |
![[IM Output]](montage_rot_overlap.jpg)
null:
”间距图像,以防止图像溢出“magick montage
”计算和生成的画布。这为我们提供了一些有趣的可能性。例如,您可以通过利用随机旋转的拍立得变换生成非常有趣的一行重叠缩略图。
|
![[IM Output]](polaroid_overlap.jpg)
+polaroid
”在不同“运行”中可能产生的图像大小随机性,从而更好地控制最终图像之间的间距和重叠。这是一个非常有趣的结果,但实际上应该将其归类为 BUG,因为这不是“magick montage
”的预期用途。我也不期望任何 HTML 图像映射能够正常工作,除非用户进行一些修复。但是,使用脚本形式的图层合并演示了一种更复杂且用户可控的重叠图像解决方案,这是推荐的且更合理的解决方案。请参阅图层图像的编程定位中的示例。 蒙太奇连接模式
如您所见,montage 具有特殊的连接模式,可用于将图像连接在一起,而无需任何额外的间距,就像“-append
”选项一样。但是,我建议您适当地设置“-tile
”选项,以便将追加方向设置为水平、垂直或数组。例如,这里我们使用“-tile x1
”水平追加图像。
magick montage balloon.gif medical.gif present.gif shading.gif \ -mode Concatenate -tile x1 montage_cat.jpg |
![[IM Output]](montage_cat.jpg)
magick montage balloon.gif medical.gif present.gif shading.gif \ -mode Concatenate -tile 2x2 montage_array.jpg |
![[IM Output]](montage_array.jpg)
magick montage medical.gif rose: present.gif shading.gif \ granite: balloon.gif netscape: recycle.gif \ -mode Concatenate -tile 4x montage_cat2.jpg |
![[IM Output]](montage_cat2.jpg)
magick montage medical.gif rose: present.gif shading.gif \ granite: balloon.gif netscape: recycle.gif \ -mode Concatenate -tile 4x -frame 5 montage_cat3.jpg |
![[IM Output]](montage_cat3.jpg)
-mode
”设置之前设置了“-frame
”,它将被关闭。因此,除非您意外使用“零几何”(见下文),否则不太可能看到这种怪异现象。![]() ![]() |
蒙太奇连接到“HTML”图像索引格式会导致图像映射不正确。基本上,生成的图像映射将类似于生成的蒙太奇是一个真正的等分“数组”图像,而不是图像的串联。换句话说,对于“短”图像行来说,它是错误的。 |
零几何,需要谨慎
仅使用“-geometry
”间距值(未指定图像大小调整),所有蒙太奇图像框架都设置为相同的大小,以便最宽和最高的图像都适合,而无需调整大小。这本身就是一种有用的行为...但是,在图像框架周围和之间留下了 1 像素的间隙。但是,如果您尝试使用“+0+0
”位置删除这些间隙,则会遇到一个非常不寻常的问题...您指定的“零几何”(即“-geometry 0x0+0+0
”)具有额外的效果,即使蒙太奇进入“连接”模式(见上文),这与我们在上面追求的目标不符。对于单个图像,如果我们使用零“-append
”(从而使用连接模式),也无关紧要。所需的结果是我们想要的,没有额外的边框。因此,如果您仅使用“magick montage
”来向图像添加标签,“-geometry +0+0
”是可以的。但是,如果您为图像指定了非零几何“大小”,即使您使用了零偏移量,也不会调用连接模式。这反过来为我们提供了一个解决原始问题的巧妙方法。我们设置“1x1
”的几何图像大小,但也告诉 IM 永远不要将图像(使用“<
”字符)缩小到此大小!换句话说,永远不要调整图像大小,只需在非零几何参数中使用零偏移量。这引出了另一个很好的经验法则...
在使用蒙太奇时始终设置非零几何
即使它只是像我上面使用的“伪”几何。 背景和透明度处理
默认情况下,图像会覆盖到蒙太奇画布上,该画布使用“-background
”颜色设置创建,如您在此处所见。
|
![]() |
-texture
”来定义要使用的图块图像,而不是“-background
”颜色。
|
![]() |
|
![]() |
-bordercolor
”设置将用于填充边框内部,有效地成为图像的背景颜色。还要注意,图像的任何透明区域也将设置为此颜色。![]() ![]() |
在 IM 6.1.4 版本之前,图像透明区域中显示的内容是未定义的。在某些版本中,您可以透过带边框的图像看到背景颜色或纹理。在其他版本中,您可能会看到黑色或白色。在其他一些版本中,您将能够看到所有图层,并且最终图像在原始图像透明的地方也将是透明的。如果这对您来说是一个问题,请立即升级。 |
-bordercolor
”填充。例如,比较“1
”的边框与最小边框宽度“2
”。-background
”颜色“None
”或“Transparent
”,并且没有任何“-texture
”图像来覆盖该设置。例如,这里我们生成了一个透明蒙太奇。请注意,“-geometry
”仍然用于在图像周围和之间添加空间。
|
![]() |
-frame
”,则也需要将“-bordercolor
”设置为透明。
|
![]() |
-shadow
”选项完全不受上述所有内容的影响。它根据单元格最终的透明形状应用,然后覆盖到背景颜色或纹理上。
|
![]() |
|
![]() |
当然,欢迎任何关于使用“
magick montage
”的建议、想法或其他示例。这些示例页面中的任何内容也同样欢迎。Montage Image Output Size The mathematics of montage is straight forward... Basically the montage width should be.... (geometry_size + 2*frame_size + 2*geometry_offset) * images_per_column That is, each 'cell' of montage has a fixed sized frame and spacing (border) added around it before the cells are appended together. In essence the size of montage is also a multiple of the tile size, which can make it easy to break up montage, or re-arrange the 'cells', if so desired, as they are simple fixed sized tiles in a rectangular array. The height is similar but with tha additional spacing needed for labels and the optional montage title, both of which are much more difficult to calculate, as they depend heavilly on text, font, pointsize, and density settings. There is also an effect of adding a shadow to the montage in this calculation, but that appears to be a simple small fixed addition to the bototm and right edges. It does not appear to effect the tile size used.