【问题标题】:How to merge images in command line? [closed]如何在命令行中合并图像? [关闭]
【发布时间】:2013-12-03 05:09:12
【问题描述】:

我想尝试CSS Sprite 技术将一些缩略图加载为单个图像。所以我需要在服务器中离线“合并”几个缩略图在一个文件中。

假设我有 10 个相同大小的缩略图。你会如何建议我从 Linux 命令行“合并”它们?

【问题讨论】:

    标签: linux image-processing command-line


    【解决方案1】:

    使用 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 的文件大小比 &lt;gm/im&gt; convert 小得多
    • @Hashbrown 很棒的补充!我冒昧地将您的代码复制到我的答案中,因为无法再添加新答案(这很奇怪,顺便说一句)。是的,所有这些 pnm 工具都是一团糟,其中一些支持 pam,一些不支持等等。
    【解决方案2】:

    您也可以尝试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
    • 这行得通,但是对于大文件需要很多时间。有没有快速合成的方法?
    • @VladTsepelev 连接大量 PNG 意味着将它们解码(到像素图)以进行操作,最后再次对其进行编码。如果您想经常扩展现有的精灵,那么保留解码的像素图版本可能会加快速度。请参阅我的答案,了解如何使用 PNM 工具来实现此操作。但当然,像素图版本比 PNG 大得多,因此需要使用更多存储空间。
    • 它说:'convert-im6.q16:宽度或高度超过限制'ktwo201121817-c102_lpd-targ.fits_autoaper.png'@error/cache.c/OpenPixelCache/3839.'
    【解决方案3】:

    您也可以使用 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 的两倍。

    【讨论】:

      【解决方案4】:

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

      convert image{1..0}.png +append result/result-sprite.png
      

      注意 +append 而不是 -append

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-04
        • 2011-09-24
        • 1970-01-01
        • 2015-10-27
        • 2014-06-01
        • 1970-01-01
        相关资源
        最近更新 更多