【发布时间】:2013-12-03 05:09:12
【问题描述】:
我想尝试CSS Sprite 技术将一些缩略图加载为单个图像。所以我需要在服务器中离线“合并”几个缩略图在一个文件中。
假设我有 10 个相同大小的缩略图。你会如何建议我从 Linux 命令行“合并”它们?
【问题讨论】:
标签: linux image-processing command-line
我想尝试CSS Sprite 技术将一些缩略图加载为单个图像。所以我需要在服务器中离线“合并”几个缩略图在一个文件中。
假设我有 10 个相同大小的缩略图。你会如何建议我从 Linux 命令行“合并”它们?
【问题讨论】:
标签: linux image-processing command-line
使用 netpbm 包的pnmcat。
您可能必须来回转换输入文件才能使用它:
pnmcat -lr <(pngtopnm 1.png) <(pngtopnm 2.png) | pnmtopng > all.png
编辑: 正如用户 Hashbrown 在评论中指出的那样,这可能会对 PNG 中不同的大小和/或透明度造成影响。为了避免他想出了这个解决方案(只是在这里复制它,因为 Q 已关闭并且无法添加新答案):
pnmcat -jleft -tb \
<(pngtopnm image139.png) \
<(pngtopnm image73.png) \
| pnmtopng \
-alpha <(pnmcat -black -jleft -tb \
<(pngtopnm -alpha image139.png) \
<(pngtopnm -alpha image73.png) \
) \
>test.png
不过,我没有测试那个解决方案。
【讨论】:
-tb 用于垂直精灵,并使用-jtop(或-jleft 用于-tb)将不同大小的精灵与轴对齐(默认为中心!)。如果它们的大小相同,我不会使用pnmcat,而是使用pnmundice,因为它支持 PAM(以及透明度)。但是,如果您的输入 png 具有透明度和/或希望大小不同的图像之间的剩余空间是透明的,您将需要使用 pnmcat like this(由于问题已关闭,我无法自己回答)
pnmcat|pnmtopng 的文件大小比 <gm/im> convert 小得多
您也可以尝试ImageMagic,它非常适合创建 CSS 精灵。一些关于它的教程here。
示例(垂直精灵):
convert image1.png image2.png image3.png -append result/result-sprite.png
示例(水平精灵):
convert image1.png image2.png image3.png +append result/result-sprite.png
【讨论】:
+append而不是-append。
convert -append *.png out.png
您也可以使用 GraphicsMagick,这是 ImageMagick 的一个更轻、更快的分支:
gm convert image1.png image2.png -append combined.png
合并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
GraphicsMagick 的速度几乎是 ImageMagick 的两倍。
【讨论】:
如果您喜欢从左到右合并图片,请使用以下命令:
convert image{1..0}.png +append result/result-sprite.png
注意 +append 而不是 -append。
【讨论】: