xiaozhuai / imageinfo

Free Palestine🇵🇸🇵🇸🇵🇸Cross platform super fast single header c++ library to get image size and format without loading/decoding. Support avif, bmp, cur, dds, gif, hdr (pic), heic (heif), icns, ico, j2k, jp2, jpeg (jpg), jpx, ktx, png, psd, qoi, tga, tiff (tif), webp ...
MIT License
106 stars 26 forks source link

关于读取图像信息和元数据信息的需求 #18

Closed Charltsing closed 1 month ago

Charltsing commented 1 month ago

捕获

图像常用信息包括:格式、宽高、DPI及单位、色彩深度/色彩位数/通道位数(1、2、4、8、16),色彩通道(1、3、4,还有索引通道或者其它什么),色彩空间(黑白、索引、sRGB、cmyk等等),压缩方式及质量(仅部分格式)

元数据除了图像自带的Tag,还包括Exif,IPTC,XMP,JFIF / JFXX,ICC Profiles,Photoshop。 Exif信息是识别图像必须要读取的。Exit常用信息包括:宽、高、DPI及单位、色彩通道、通道位数、每像素通道数、色彩空间、原始日期、方向、GPS等等若干。

个人实践:图像格式、宽高像素、宽高DPI及单位、位数、通道数、色彩空间、压缩方式及质量、图像旋转方向、原始日期。这些11项是经常用到的,如果图像数据提供的话必须要能识别。

我现在用ImageMagick和metadata-extractor-dotnet来识别,前者优点是格式全,缺点是要读取全部图像数据,速度太慢。后者能识别各种格式的元数据,但是输出太全面了,外行也看不明白,没啥必要。

ImageInfo比较符合日常需求,识别的图像格式也足够。如果能识别图像格式的主要元数据就非常完美了。

当然,这是个慢功夫的活。

xiaozhuai commented 1 month ago

@Charltsing 感谢你的建议 但是这些是不会支持的,解析exif中的旋转信息已经足够了。对于其它信息,实际上需要的是专门的decoder库去完成。 这个库的主要目的是得到图片的类型(扩展名,mimetype),验证是否为图片,获取图像的分辨率。

Charltsing commented 1 month ago

有些数据在元数据里面,不需要decoder,只是需要慢慢搞。

我觉得这些早晚得加上,以后再说吧。