我想为RAW文件创建缩略图,但是直接处理RAW文件非常慢。我想尝试首先处理来自嵌入式JPG的缩略图,并且仅在没有其他选择时才渲染RAW文件。如何使用魔杖提取嵌入的JPG?

最佳答案

RAW格式在设备和制造商之间有所不同。通常,完整的图像传感器数据以JPEG预览的形式存储为TIFF。与其将整个文件加载到工具中,不如将其查找到规格并直接使用filestruct提取预览,可能会更快。这是Fujifilm's spec的示例。



 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数据的位置。流程可能看起来像...

关于python - 使用/Python MagickWand从RAW文件中提取嵌入式JPEG,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24684508/

10-12 22:24