1

我想为 RAW 文件创建缩略图,但直接处理 RAW 文件非常慢。我想首先尝试处理嵌入 JPG 中的缩略图,并且仅将 RAW 文件渲染为最后的手段。如何使用 Wand 提取嵌入的 JPG?

4

2 回答 2

1

RAW格式因设备和制造商而异。通常完整的图像传感器数据存储为带有 JPEG 预览的 TIFF。与其将完整的文件加载到工具中,查找规范可能会更快,并使用file和直接提取预览struct这是Fujifilm 规格的示例。

 from struct import unpack

 fd = file('source.raf','rb')
 # Skip over header + directory
 # See manufacture specification
 offset  = 16 # Magic bytes
 offset += 12 # Version
 offset += 32 # Camera name
 offset += 24 # Directory start & meta
 fd.seek(offset, 0)
 jpeg_offest = unpack('i', fd.read(4)) # Read where JPEG data starts
 jpeg_length = unpack('i', fd.read(4)) # Read size of JPEG data
 fd.seek(jpeg_offset, 0)
 jpg_blob = fd.read(jpeg_length)

现在将 blob 放入wand,或默认返回 RAW 图像

 from wand.image import Image

 if jpeg_blob:
     img = Image(blob=jpg_blob)
 else:
     img = Image(filename='source.raf')

如果您的所有 RAW 数据都是使用相同的制造规格生成的,则此解决方案将起作用。否则,您需要为每个规范构建文件配置文件,并评估每个 RAW 文件的魔术字节以确定 JPEG 数据的位置。流可能看起来像...

点文件

于 2014-09-17T19:07:50.893 回答
0

如果您正在阅读 Canon CR2 文件,我已经编写了一个库rawphoto,您可以使用它(它也在pypi上)。

要提取缩略图,您可以执行以下操作:

from rawphoto.raw import Raw
from wand.image import Image

with Raw(filename="example.CR2") as rawfile:
    blob = rawfile.fhandle.get_thumbnail()
// Do something with your JPEG thumbnail, eg. convert it to a PNG with Wand:
with Image(blob=blob) as image:
    image.format = 'png'
    image.save(filename='someimage.png')

稍后我可能会添加对其他原始格式的支持。欢迎拉取请求。

于 2015-01-25T03:47:24.583 回答