从带有Python';魔杖

从带有Python';魔杖,python,magickwand,wand,Python,Magickwand,Wand,我想为原始文件创建缩略图,但是直接处理原始文件非常慢。我想先尝试处理嵌入JPG的缩略图,最后才渲染原始文件。如何使用Wand提取嵌入的JPG?原始格式因设备和制造商而异。通常,完整的图像传感器数据存储为带有JPEG预览的TIFF格式。与其将完整的文件加载到工具中,还不如更快地找到规范,并直接使用file和struct提取预览。这里有一个例子 从结构导入解包 fd=文件('source.raf','rb') #跳过标题+目录 #参见制造规范 偏移量=16#魔术字节 偏移量+=12#版本 偏移量+=

我想为原始文件创建缩略图,但是直接处理原始文件非常慢。我想先尝试处理嵌入JPG的缩略图,最后才渲染原始文件。如何使用Wand提取嵌入的JPG?

原始格式因设备和制造商而异。通常,完整的图像传感器数据存储为带有JPEG预览的TIFF格式。与其将完整的文件加载到工具中,还不如更快地找到规范,并直接使用
file
struct
提取预览。这里有一个例子

从结构导入解包
fd=文件('source.raf','rb')
#跳过标题+目录
#参见制造规范
偏移量=16#魔术字节
偏移量+=12#版本
偏移量+=32#摄像机名称
偏移量+=24#目录开始和元
fd.seek(偏移量,0)
jpeg_offest=unpack('i',fd.read(4))#从jpeg数据开始读取
jpeg_length=unpack('i',fd.read(4))#jpeg数据的读取大小
fd.seek(jpeg_偏移量,0)
jpg\u blob=fd.read(jpeg\u长度)
现在将水滴放入
魔杖
,或默认返回原始图像

从wand.image导入图像
如果jpeg_blob:
img=图像(blob=jpg\u blob)
其他:
img=Image(filename='source.raf')
如果您的所有原始数据都是使用相同的制造规格生成的,则此解决方案将起作用。否则,您需要为每个规格构建文件配置文件,并评估每个原始文件的魔法字节,以确定JPEG数据的位置。流可能看起来像


如果您正在阅读佳能CR2文件,我已经编写了一个名为的库,您可以使用它(它也是打开的)

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

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')

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

期望每个制造商的原始格式与缩略图JPEG之间有一个恒定的偏移量,这真的合理吗?如果它永远不会随着格式的更新而改变呢?它不会改变,所以需要阅读。大多数制造商都会发布规范,任何解决方案都应该遵循这些规范。