如何平铺单个克隆的图像图形魔术

时间:2018-11-30 19:45:50

标签: image-processing imagemagick graphicsmagick

我想用graphicsmagick创建一个在宽度和高度上平铺的单个图像的图像。

我尝试了此命令:

gm montage -geometry 2x2 mypic.png mypic.png mypic.png out.png

但是,我想重复多次这种图案图像(超过100x100)。

是否可以在不重复mypic.png 10000次的情况下做到这一点?吗?

2 个答案:

答案 0 :(得分:3)

我不知道GraphicsMagick。但是我认为它类似于ImageMagick,因为它是ImageMagick的衍生产品。在ImageMagick中,您可以通过两种方式轻松地做到这一点:

输入:

enter image description here

montage lena.jpg -duplicate 24 -tile 5x5 -geometry +0+0 result.jpg


enter image description here

convert -size 1280x1280 tile:lena.jpg result2.jpg


enter image description here

查看在https://imagemagick.org/Usage/canvas/#tile上进行平铺的各种方法

我不确定GraphicsMagick是否具有-duplicate,因为ImageMagick 6.6.8-10在2011年3月27日引入后很久才引入。

ImageMagick具有比GraphicsMagick更多的功能,但可能会稍微慢一些。您可能要考虑使用ImageMagick而不是GraphicMagick

答案 1 :(得分:3)

您没有说打算制作多大的图像,但是如果图像很大,则会遇到很多问题。

首先,JPEG限制为65536 x 65536像素,因此,如果需要更大的像素,则需要bigtiff或PNG之类的东西。

其次,您可能需要大量内存才能组成大图像。例如,在这台笔记本电脑上,我可以运行:

$ time convert -size 50000x50000 tile:k2.jpg result.jpg
real    6m11.366s
user    1m19.671s
sys 0m20.836s

在大约6m的时间内制作50k x 50k像素的JPG。

convert将在开始写入结果之前组装整个图像。如果您没有大量的RAM,它将使用一个巨大的临时文件。如果在处理期间查看/tmp,我会看到:

$ ls -l /tmp
total 1199684
-rw------- 1 john john 20000000000 Dec  1 15:56 magick-9559WtN2jwPlvrMm

一个20GB的临时文件。那是50000 * 50000 * 4 * 2,所以它正在制作一个16位,四通道的临时映像。由于convert的所有时间都花在了磁盘IO上,因此速度相当慢。

您可以考虑使用其他系统-libvips是一个流图像处理库,因此它可以执行这样的命令,而不必制作完整的中间图像。我看到了:

$ time vips replicate k2.jpg result.jpg 35 25
real    0m13.592s
user    0m16.383s
sys 0m1.426s
$ vipsheader result.jpg 
result.jpg: 50750x51200 uchar, 3 bands, srgb, jpegload

也就是说,将k2.jpg水平复制35次,垂直复制25次,以使图像略大于50k x 50k。它不会创建临时文件,并且会在大约15秒内完成。处理非常大的输出图像不会有问题-我会定期处理300,000 x 300,000像素的图像(显然不是jpg格式)。