我想为RAW文件创建缩略图,但直接处理RAW文件非常慢。我想首先尝试从嵌入式JPG处理缩略图,并仅将RAW文件渲染为最后的手段。如何使用Wand提取嵌入式JPG?
答案 0 :(得分:1)
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数据的位置。流程可能看起来像......
答案 1 :(得分:0)
如果您正在阅读佳能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')
我稍后可能会添加对其他原始格式的支持。拉请求欢迎。