V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imagecap
V2EX  ›  程序员

有玩过超大图合并算法的吗?

  •  
  •   imagecap · 2017-08-02 10:14:09 +08:00 · 4308 次点击
    这是一个创建于 2449 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1.低内存( 1G )和低(无)显卡的机器
    2.由多块小图( 2500 * 1024 )合并成超大图( 5000 像素 * 60000 像素 )
    3.合并后的图片压缩格式 png 或者 jpg



    有没有 v2 的高手同学玩过?
    18 条回复    2017-08-03 18:19:13 +08:00
    oh
        1
    oh  
       2017-08-02 10:15:31 +08:00 via iPhone
    啥语言……
    imagecap
        2
    imagecap  
    OP
       2017-08-02 10:18:26 +08:00
    @oh 语言不限
    oh
        3
    oh  
       2017-08-02 10:22:25 +08:00 via iPhone
    @wayixia 有点意思,有 2500*1024 的图片素材吗?
    zmj1316
        4
    zmj1316  
       2017-08-02 10:34:24 +08:00
    先拼成 bmp 然后转 png ?简单粗暴
    rogerchen
        5
    rogerchen  
       2017-08-02 10:37:13 +08:00
    @wayixia
    imagemagick 有一个叫 stream 的 CLI,专门针对你这种情况的


    @zmj1316
    拼好放到内存里就 900M 了,1G 内存搞个毛。
    lybtongji
        6
    lybtongji  
       2017-08-02 13:39:12 +08:00
    @rogerchen 磁盘操作
    JerryCha
        7
    JerryCha  
       2017-08-02 15:23:54 +08:00
    顺序确定的话,把数据块抽出来追加,改文件头信息
    slack
        8
    slack  
       2017-08-02 15:50:27 +08:00
    hienchu
        9
    hienchu  
       2017-08-02 15:52:13 +08:00
    性能没要求的话,流处理就可以了,硬盘够就行
    VShawn
        10
    VShawn  
       2017-08-02 18:08:23 +08:00
    流处理+1,先算好每张图在大图中的相对坐标,按照图片二进制格式写入,内存中每读几百兆的内容就写入硬盘一次,就是处理速度可能会比较慢。
    afpro
        11
    afpro  
       2017-08-02 18:37:40 +08:00
    涉及图片重叠、扭曲、旋转之类的问题不?
    imagecap
        12
    imagecap  
    OP
       2017-08-02 23:01:39 +08:00
    @oh 素材有的,要的话我给你发一份 1920 * 950 合并后大小 1920 * 43700 像素
    imagecap
        13
    imagecap  
    OP
       2017-08-02 23:02:23 +08:00
    @rogerchen nodejs 我已经试过了,太占内存了
    imagecap
        14
    imagecap  
    OP
       2017-08-02 23:04:29 +08:00
    @afpro 没那么复杂,唯一的要求就是在低内存低显卡的情况下完成大图合并
    imagecap
        15
    imagecap  
    OP
       2017-08-02 23:13:24 +08:00
    @VShawn
    @hienchu

    类似把硬盘当内存用,慢是慢点
    zmj1316
        16
    zmj1316  
       2017-08-03 12:52:52 +08:00
    @rogerchen 放内存里还用 bmp 做什么,bmp 格式的像素信息在文件上位置是确定的,基本就等于拼文件了
    superboss01
        17
    superboss01  
       2017-08-03 13:16:57 +08:00
    直接算出每个图片的像素大小,然后写入一个初始化后的 bmp 里面,简单粗暴
    afpro
        18
    afpro  
       2017-08-03 18:19:13 +08:00
    按行拼接,jpeg 和 png 都支持按行 decode 和 encode,所以你的内存只要能放下两行 RGB 就够了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   937 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:40 · PVG 04:40 · LAX 13:40 · JFK 16:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.