使用ImageMagick在打印边缘上平铺图像?

4
我正在尝试让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

对于我的每个文件,我都运行montage命令。我使用printf将图像文件名重复300次。然后我将其15x20平铺。 15x20来自8.5减去1英寸的页边距= 7.5 * 2 = 15,同样(11-1)* 2 = 20。300个图像来自15 * 20。然后我说我想要在一页信纸上偏移1x1。 (这是我尝试设置边距的方式)我说我以每英寸像素为单位(但没有一个单位似乎匹配)。我通过density命令将dpi设置为300,其中8.5 * 300 = 2550,11 * 300 = 3300。
我一直在玩其他设置(geometry等),但这些都不起作用。而且单位似乎也没有意义...现在我的结果pdf是一个正方形等等...
我如何制作这样的平铺页面?还有没有更有效的方法可以完成这项任务?到目前为止,我的速度非常慢。
编辑:
更多信息: i:montage --version 版本:ImageMagick 6.8.8-10 Q16 x86_64 2015-03-10 http://www.imagemagick.org

平铺图像:enter image description here

我的当前输出:enter image description here

请注意,边距不正确,是正方形而不是信纸大小,平铺也有倾斜


如果您提供一个SVG文件和相应的输出示例,那么我们理解您正在尝试做什么将非常有帮助。另外,请问您使用的是哪个版本的ImageMagick?使用convert一次读取图像比多次读取更有效地进行平铺。请参见http://www.imagemagick.org/Usage/canvas/#tile以了解一些平铺方法。我通常使用mpr:方法。 - fmw42
您的輸入是PNG,而不是SVG。因此,我們無法使用您提供的起始條件開始。您能否發佈一個連接到對應於您提供的PNG文件的SVG文件的鏈接?你說的平鋪圖像歪斜了,你是什麼意思?我沒有看到這個問題。 - fmw42
你在使用RSVG、Inkscape或IM MSVG/XML作为SVG代理阅读器吗?使用的是哪个版本?请注意,你的IM版本已经过时了大约100个版本。如果出现问题,你可能需要考虑升级。 - fmw42
你想要什么输出密度来确定你的质量。例如,如果你的瓷砖在72 dpi下对应0.5英寸,则每个瓷砖为36像素。但是,如果你想要300 dpi,则每个瓷砖为150像素。 - fmw42
请注意,您可以使用“convert -list format”命令查找委托和版本,并查看SVG的相关信息。 - fmw42
显示剩余2条评论
1个回答

4
根据您提供的PNG图片,我想您希望在8.5 x 11英寸的打印图像内部周围留出1英寸的白边。因此,平铺的宽度将为7.5英寸,平铺的高度将为10英寸。
  • 1英寸 = 300 dpi,因此边框厚度= 300 px = 2个瓷砖厚
  • 9-1 = 10英寸,即瓷砖区域高度= 10 * 300 = 3000 px
  • 8.5-1 = 7.5英寸,即瓷砖区域宽度= 7.5 * 300 = 2250 px
  • 1个瓷砖= 0.5英寸,以300 dpi计算= 0.5 * 300 = 150 px

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的边框,这样它就可以适合一页纸了。同样,性能也是可以接受的。 - David Mokon Bond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接