【问题标题】:Tiling an image over a page with ImageMagick with print margins?使用带有打印边距的 ImageMagick 将图像平铺在页面上?
【发布时间】:2017-05-11 16:50:34
【问题描述】:

我正在尝试让 ImageMagick 为我做点什么,但我遇到了一些问题。首先,我不理解度量单位,因此传递到 ImageMagick 中,所以我的脚本没有产生我需要的东西。其次,我这样做的方式非常低效。运行此脚本需要很长时间(您在下面看到的脚本与我正在运行的脚本相比略有删减)。

所以对于我正在做的事情...我有许多带有图标的 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 上使用它。 (这是我在边际上的尝试)我说我说的是每英寸像素(但似乎没有一个单位匹配)。我通过密度命令将 dpi 设置为 300,其中 8.5*300 = 2550 和 11*300 = 3300。

我一直在玩弄其他设置(几何等),但这些都不起作用。而且这些单位似乎也没有意义......现在我得到的pdf是一个正方形等等......

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

编辑:

更多信息:

i:montage --version Version: ImageMagick 6.8.8-10 Q16 x86_64 2015-03-10 @987654321@

平铺图片:

我当前的输出:

注意边距不对,是方形的不是字母页,瓷砖也是倾斜的

【问题讨论】:

  • 如果您提供了一个 SVG 文件和相应的输出示例,这将非常有助于我们了解您想要做什么。还有你使用的是什么版本的 ImageMagick。使用转换和读取图像一次而不是多次读取图像可以更有效地完成平铺。有关平铺方法的编号,请参阅imagemagick.org/Usage/canvas/#tile。我通常使用 mpr: 方法。
  • @fmw42 添加了一些图片,展示了我目前拥有的东西。
  • 您的输入是 PNG 而不是 SVG。所以我们不能从你的起始条件开始。您能否发布与您提供的 PNG 文件对应的 SVG 文件的链接。平铺图像歪斜是什么意思?我没看到。
  • 您是否使用 RSVG 或 Inkscape 或 IM MSVG/XML 为您的 SVG 委托阅读器以及什么版本?请注意,您的 IM 版本大约有 100 个旧版本。如果无法正常工作,您可能需要考虑升级。
  • 您希望结果的输出密度是多少?这将决定你的质量。例如,如果您的图块对应于 72 dpi 的 0.5 英寸,则图块为 0.5*72=36 像素。但是如果你想要 300 dpi,那么每个图块 0.5*300=150 像素。

标签: pdf svg imagemagick tile


【解决方案1】:

鉴于您提供的 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 仅支持像素每厘米,但 IM 会相应地转换我的像素每英寸规格。因此,如果您查看元数据,它可能会以像素每厘米为单位显示其他一些密度。但它们将对应于所需的 300 dpi。)

【讨论】:

  • 谢谢,这就是我想要的。我做了轻微的调整,因为我只想要 1/2 的边框,这样它就可以放在一页上。同样的表现是可以接受的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2012-01-01
  • 1970-01-01
  • 2010-12-05
  • 2017-04-11
  • 1970-01-01
相关资源
最近更新 更多