使用 Python 中的 canon_cr3 库将 .CR3 文件转换为 .JPG

Converting a .CR3 file to .JPG using canon_cr3 library in Python

我想使用 Python 将 .CR3 文件(相机是 Canon PowerShot SX70 HS)转换为 .JPG 文件。我在 GitHub 上找到了一个项目,它实际上应该完成所需的任务:https://github.com/lclevy/canon_cr3

我已经使用 setup.py 文件安装了 canon_cr3 库。事实上, canon_cr3-13mar2019-py3.6.egg 文件在安装库后存在。因此,当我输入

from canon_cr3 import Image

在Python3.6.1shell回车,好像导入成功了(没有报错)。但是,当我在 https://github.com/lclevy/canon_cr3#example-usage

上尝试示例时
image = 'D:\pic\test_img.CR3'
image = image.replace("\", "/") #working on Windows
img = Image(image)

出现错误:

NameError: name 'getLongBE' is not defined

错误出现在'cr3_lib.py'文件中执行stsz()函数。 getLongBE() 函数在库的 'parse_cr3.py' 文件中定义。但是,我看不到 'parse_cr3.py' 文件和 'cr3_lib.py' 文件之间的 link。

我不知道我错过了什么、该尝试什么或如何解决这个问题。你有什么建议吗? 或者在 Python?

中是否有另一种方法可以将 .CR3 文件转换为 .png

更新:

只需在 cr3_lib.py 文件中添加缺少的函数:

def getLongBE(d, a):
    return unpack('>L',(d)[a:a+4])[0]

您的 cr3_lib.py 文件应如下所示:

from struct import unpack, Struct
from binascii import unhexlify, hexlify
# from parse_cr3 import getLongBE # remove this line

def getLongBE(d, a):
    return unpack('>L',(d)[a:a+4])[0]

...

注意: 如果您之前添加了以下行,请从当前文件中删除:

from parse_cr3 import getLongBE