在自定义模块中,我将图像文件上传到数据库。现在我想从上传文件中获取一些属性,同时图像文件上传到odoo并将此属性保存在数据库中。要获取文件名,我在form.view中使用以下代码:
<field name="image" filename="name"/>
使用参数filename =&#34; name&#34;图像文件中的文件名保存到数据库字段名称中。这很好。
我现在的问题是,如何从上传图片文件中获取其他属性?例如,我想获取录制日期,分辨率,图像大小......有没有人知道如何从上传图像文件中获取此属性以将此信息保存在数据库记录中?
非常感谢!
答案 0 :(得分:1)
类似的东西应该有效:
import PIL
from StringIO import StringIO
class SomeModelWithImage(models.Model):
image = fields.Image(required=True)
name = fields.Char()
size = fields.Integer(compute='_compute_image_details')
camera_maker = fields.Char(compute='_compute_image_details')
@api.one
@api.depends('image')
def _compute_image_details(self):
image_content = self.image.decode('base64')
# File size
self.size = len(self.image_content)
# Camera make and model from EXIF tags
image = PIL.Image.open(StringIO(image_content))
exif_tags = image._getexif()
# 0x010f is a numeric code for the "make" exif field
# You can find a list of fields here: exiv2.org/tags.html
self.camera_maker = exif_tags.get(0x010f)
这会创建另外两个字段 - size
和camera_maker
,这些字段会在设置image
字段时自动填充。相机制造商信息来自图像的EXIF标签。您可以在exiv2.org/tags.html下看到其他可能的EXIF标记。您应该注意,图像不需要任何标记。
答案 1 :(得分:-1)
您可以继承“ir.attachment”并创建元数据字段并将此详细信息存储在模型中,您可以尝试通过此代码查找详细信息。
图像文件获取编码格式,因此您可以解码64转换文件并获取图像并获取图像的元数据。
import os
import time
from stat import * # ST_SIZE etc
try:
st = os.stat('1.png')
except IOError:
print "failed to get information about", file
else:
print "file size:", st[ST_SIZE]
print "file modified:", time.asctime(time.localtime(st[ST_MTIME]))
This参与链接帮助你......
可能是其他解决方案,但没有找到时间,所以你可以尝试这个代码..