c++对大量图片进行序列化和反序列化

36 天前
 h3xz
工作中开发的软件有这样一个需求:
程序用了某种算法对大量图片(约有 9 千多张,每张约 4M )进行了处理。我该怎么将这所有的图片以数组的形式序列化为一个文件夹,当从硬盘将这些图片读回内存时可以随机访问图片,以便用户第二次打开。
1846 次点击
所在节点    程序员
34 条回复
feirisu
36 天前
没看懂
wangtian2020
36 天前
不就是跟个系统自带的相册、或者说是图片查看器差不多吗。搞个缩略图差不多得了
xtreme1
36 天前
意思是图片在内存里什么样就在文件里什么样?
存 PPM 呗
testonly
36 天前
9k 张图片也不多,我近千万张图片在电脑。
将所有文件的名字存在一个文本文件里就行了,随机到那个图片的名字再读哪个图片出来,我还是用弱鸡 C#弄的。
h3xz
36 天前
感谢大家的回复。我没有表达清楚问题的意思,我是希望将所有的图片能够序列化到一个文件中(不是文件夹),我保存的不单单只有图片,还有与图片相关的一系列的数据,编号等,因此我想请教有没有这样一种第三方库:能够以将图片,数据,编号,日期作为一个对象进行序列化,我起初使用的是 protobuf ,但是该库不能序列化太大的文件 。如果采用的是读取图片的名称,用户一旦修改了图片名,那么读取图片就会出错了。非常感谢大家的建议。
xieym
36 天前
sqlite?
h3xz
36 天前
@xtreme1 我想的是每次都保存对象,这个对象包含了图片,编号,和一系列相关数据。
hitmanx
36 天前
看不出来这个用例里面,图片和普通的二进制文件对于序列化有什么区别?你把图片想象成一个普通的二进制文件不就行了。
那么现在就是序列化一个 array 或者 map ,里面每个元素包含一些 metadata(number, string etc)和一个不定长的二进制文件。
morenacl
36 天前
这不就是对象存储干的事儿嘛
StrangerA
36 天前
9k * 4M ,36 个 G 存入一个文件,还想瞬间读写?

建议存缩略图进 sqlite
jones2000
36 天前
内存数据库
mxalbert1996
36 天前
换个思路,直接把文件打包成一个不带压缩的 zip 文件。zip 文件是支持随机读取的。
3dwelcome
36 天前
zip 文件可以,但是大小有一定限制,有 zip64 的变种,可以支持 4G 以上的大文件。
picone
36 天前
记录 offset ,fseek 即可
leonshaw
36 天前
在文件上建文件系统,mount
taygetus
36 天前
#include <boost/serialization/map.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
linauror
36 天前
如果要存的数据不多,直接把这些数据给图片命名呢,比如 xxxx_yyyy_20240101235959.jpg
shyrock
36 天前
建议直接说原始需求,而不是你分析之后想要的算法。。。
shakeyo
36 天前
简单点就 zip
麻烦点就自己设计一个文件格式,类似|magicNumber|version|indexOffset|fileOffset|
生成过程就是计算头,填充并依次将头、文件索引表、文件数据 1 ,文件数据 2 。。。。。写入到文件中
edward1987
36 天前
确定需求是 [随机访问图片] 而不是 [随时访问图片] ? 怎么看着像是在做一个图文游戏,然后想用序列化的方式加密啊

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

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

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

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

© 2021 V2EX