使用Go和OpenCV读写图像中的ICC配置文件

3
我正在使用Go和go-opencv包编写调整图像大小的代码。调整大小后,我写出的图像缺少原始图像的ICC配置文件。
是否有任何Go或C库可以读/写ICC配置文件?目标是不使用命令行工具而是使用Go / C库,以便我可以在进程内完成所有操作。我知道exiftool存在并且可以为我执行此操作,但我宁愿不要调用perl脚本。

1
OpenCV在读取图像时会丢弃任何图像头,因此不会保留ICC或EXIF数据。(另外,我认为将OpenCV的弃用C API封装到Go中是一个可怕的想法。完全过时的东西) - berak
2个回答

2

我只知道 go-iccjpeg 这个工具包:

这是一个小型实用程序包,用于从JPEG缓冲区中提取国际彩色协会(ICC)配置文件

import "github.com/vimeo/go-iccjpeg/iccjpeg"

iccjpeg.GetICCBuf(input io.Reader) ([]byte, error)

它接受一个带有JPEG图像的io.Reader,并返回一个包含从该JPEG提取的嵌入式ICC配置文件的缓冲区(如果有的话)。如果没有,则返回一个空缓冲区。

1
经过更多的研究,我发现了libvips和go bindings。 libvips不会剥离任何嵌入的配置文件。这篇博客文章提到了这一点:

文件加载/保存操作(如tiffload,jpegsave等)不会对颜色进行任何处理。在加载时,它们将任何ICC配置文件作为元数据附加到vips图像上,在保存时,它们会将任何附加的配置文件写入文件中。它们旨在为您提供非常接近实际存储在文件中的内容,并将颜色处理留给您安排。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接