如何在命令行中合并图像?

Mic*_*ael 96 linux command-line image-processing

我想尝试使用CSS Sprite技术将一些缩略图作为单个图像加载.所以我需要在服务器中离线单个文件中"合并"一些缩略图.

假设我有10个相同大小的缩略图.您如何建议我从Linux命令行"合并"它们?

Pet*_*sik 172

您还可以尝试ImageMagic,它非常适合创建CSS精灵.关于它的一些教程在这里.

示例(垂直精灵):

convert image1.png image2.png image3.png -append result/result-sprite.png
Run Code Online (Sandbox Code Playgroud)

示例(水平精灵):

convert image1.png image2.png image3.png +append result/result-sprite.png
Run Code Online (Sandbox Code Playgroud)

  • 注意:这将生成一个垂直精灵,对于水平精灵使用`+ append`而不是`-append`. (43认同)
  • 如果你很懒,`convert -append*.png out.png` (12认同)
  • 这可行,但对于大文件需要花费很多时间。有没有快速合成的方法? (3认同)
  • @VladTsepelev 连接大量 PNG 意味着将它们解码(到像素图)以进行操作,最后再次对它们进行编码。如果您想经常扩展现有的精灵,那么保留解码的像素图版本可能可以加快速度。请参阅我的答案,了解如何使用 PNM 工具来实现此操作。但当然,像素图版本比 PNG 大得多,因此预计会使用更多存储空间。 (2认同)
  • 它说:“convert-im6.q16:宽度或高度超过限制“ktwo201121817-c102_lpd-targ.fits_autoaper.png”@ error/cache.c/OpenPixelCache/3839。” (2认同)

tja*_*nez 24

您还可以使用GraphicsMagick,一个更轻,更快的ImageMagick分支:

gm convert image1.png image2.png -append combined.png
Run Code Online (Sandbox Code Playgroud)

合并12幅图像的简单时间比较:

time convert image{1..12}.jpg -append test.jpg

real    0m3.178s
user    0m3.850s
sys     0m0.376s

time gm convert image{1..12}.jpg -append test.jpg

real    0m1.912s
user    0m2.198s
sys     0m0.766s
Run Code Online (Sandbox Code Playgroud)

GraphicsMagick的速度几乎是ImageMagick的两倍.


Alf*_*lfe 7

使用pnmcatnetpbm-package.

您可能需要来回转换输入文件才能使用它:

pnmcat -lr <(pngtopnm 1.png) <(pngtopnm 2.png) | pnmtopng > all.png
Run Code Online (Sandbox Code Playgroud)


abu*_*bua 6

如果您希望从左到右合并图片,请使用以下命令:

convert image{1..0}.png +append result/result-sprite.png
Run Code Online (Sandbox Code Playgroud)

注意+append代替-append.