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

2017-08-02 10:14:09 +08:00
 imagecap
1.低内存( 1G )和低(无)显卡的机器
2.由多块小图( 2500 * 1024 )合并成超大图( 5000 像素 * 60000 像素 )
3.合并后的图片压缩格式 png 或者 jpg



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


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

类似把硬盘当内存用,慢是慢点
zmj1316
2017-08-03 12:52:52 +08:00
@rogerchen 放内存里还用 bmp 做什么,bmp 格式的像素信息在文件上位置是确定的,基本就等于拼文件了
superboss01
2017-08-03 13:16:57 +08:00
直接算出每个图片的像素大小,然后写入一个初始化后的 bmp 里面,简单粗暴
afpro
2017-08-03 18:19:13 +08:00
按行拼接,jpeg 和 png 都支持按行 decode 和 encode,所以你的内存只要能放下两行 RGB 就够了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/379723

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX