我想为RAW文件创建缩略图,但是直接处理RAW文件非常慢。我想尝试首先处理来自嵌入式JPG的缩略图,并且仅在没有其他选择时才渲染RAW文件。如何使用魔杖提取嵌入的JPG?
最佳答案
RAW
格式在设备和制造商之间有所不同。通常,完整的图像传感器数据以JPEG预览的形式存储为TIFF。与其将整个文件加载到工具中,不如将其查找到规格并直接使用file
和struct
提取预览,可能会更快。这是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/