使用带有打印边距的 ImageMagick 在页面上平铺图像?

Tiling an image over a page with ImageMagick with print margins?

我正在尝试让 ImageMagick 为我做一些事情,但我 运行 遇到了一些问题。首先,我不理解传递给 ImageMagick 的度量单位,因此我的脚本没有生成我需要的内容。其次,我这样做的方式非常低效。 运行 这个脚本需要很长时间(你在下面看到的脚本比我 运行ning 稍微删减了)。

所以对于我正在做的事情...我有许多带有图标的 svg 文件。我希望为这些文件中的每一个生成一个页面。生成的页面将包含平铺在整个页面上的图标,边上有边距。我正在寻找页面周围有 1/2 页边距的 1/2 英寸图块,它需要是美国信函(8 1/2 x 11 英寸)。

在阅读了大量文档之后,这就是我想出的。

colors=(red blue purple yellow green black)

mkdir -p generated/icons/
for color in ${colors[@]}; do
  images=`printf "source/icons/${color}.svg%.0s " {1..300}`
  montage $images -tile 15x20 -page Letter+1+1 -units PixelsPerInch -density 2550x3300 \
                  generated/icons/${color}.pdf
done

因此,对于我的每个文件,我 运行 蒙太奇。我使用 printf 重复图像文件名 300 次。然后我平铺这个 15x20 次。 15x20 来自 8.5 减去 1 英寸边距 = 7.5*2 = 15 并且同样 (11-1)*2 = 20。300 张图像来自 15*20。然后我说我想要这个在字母页面偏移量 1x1 上。 (这是我的尝试)我说的是每英寸像素(但 none 的单位似乎匹配)。我通过密度命令将 dpi 设置为 300,其中 8.5*300 = 2550 和 11*300 = 3300.

我一直在尝试其他设置(几何等),但其中 none 有效。而且单位似乎也没有意义...现在我的结果 pdf 是一个正方形等...

如何制作这样的平铺页面?我还有办法更有效地做到这一点吗?到目前为止我的速度很慢。

编辑:

更多信息:

i:蒙太奇--版本 版本:ImageMagick 6.8.8-10 Q16 x86_64 2015-03-10 <a href="http://www.imagemagick.org" rel="nofollow noreferrer">http://www.imagemagick.org</a>

平铺图片:

我当前的输出:

注意页边距不对,是正方形不是字母页,平铺也是歪斜的

根据您提供的 PNG 图像,我认为您希望在 8.5x11 英寸的打印图像中四周有 1 英寸的白色边框。因此,平铺宽度为 7.5 英寸,平铺高度为 10 英寸。

  • 1 英寸 = 300 dpi 所以边框厚度 = 300 像素 = 2 块厚
  • 11-1 = 平铺区域高度为 10 英寸 = 10*300 = 3000 像素
  • 8.5-1 = 7.5 英寸宽平铺区域宽度 = 7.5*300 = 2250 像素
  • 1 个图块 = 0.5 英寸,300 dpi = 0.5*300 = 150 像素

convert lUDbK.png -resize "150x150!" -write mpr:tile +delete -size 2250x3000 tile:mpr:tile -bordercolor white -border 300 -units pixelsperinch -density 300 tiled_page.png

我的 Mac Mini 的处理时间为 1.75 秒。

这会生成一个相当大的图像。您必须提取图像才能看到边框,因为此页面背景是白色的。

(请注意,PNG 仅支持 pixelspercentimeter,但 IM 会相应地转换我的 pixelperinch 规格。因此,如果您查看元数据,它可能会以 pixelspercmeter 为单位向您显示一些其他密度。但它们将对应于需要 300 dpi。)