我想尝试 CSS Sprite 技术,将几个缩略图作为单个图像加载。因此,我需要在服务器离线将几个缩略图“合并”成一个文件。 假设我有10个相同大小的缩略图。您会建议我如何从Linux命令行“合并”它们?
你也可以尝试使用ImageMagick来创建CSS精灵,这是一个非常好的选择。关于它的一些教程可以在这里找到。
示例(垂直精灵):
convert image1.png image2.png image3.png -append result/result-sprite.png
示例(横向精灵图):
convert image1.png image2.png image3.png +append result/result-sprite.png
convert -append *.png out.png
命令进行操作。该命令会将所有的 PNG 图片纵向拼接成一张图片,并将结果保存为 out.png 文件。 - Chillar Anand您还可以使用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快两倍。
使用 netpbm 包中的 pnmcat
命令。
你可能需要将输入文件进行转换才能使用它:
pnmcat -lr <(pngtopnm 1.png) <(pngtopnm 2.png) | pnmtopng > all.png
编辑: 正如用户Hashbrown在评论中指出的那样,这可能会对PNG文件的大小和/或透明度造成问题。为了避免这种情况,他提出了以下解决方案(在此只是复制一下,因为该问题已关闭,不能添加新答案):
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
(由于问题已关闭,我无法自己回答)。 - Hashbrownconvert image{1..0}.png +append result/result-sprite.png
+append
而不是-append
。
montage -geometry +1+1 01.jpg 02.jpg theproblem.jpg
进行拼接。 - VojtaK