2016-01-11 2 views
1

В пользовательском модуле я загружаю файл изображения в базу данных. Теперь я хочу получить некоторые атрибуты из файла загрузки, в то время как файл изображения загружается в онем и сохраняет эти атрибуты в базе данных. Для того, чтобы получить имя файла я использую следующий код в form.view:Получение атрибутов от загрузки файла изображения в odoo

<field name="image" filename="name"/> 

С имя_файла = «имя» параметра имя файла из файла изображения сохраняется во имя поля базы данных. Это прекрасно работает.

Вопрос теперь, как я могу получить другие атрибуты из загружаемого файла изображения? Например, я хочу получить дату записи, разрешение, размер изображения ... Кто-нибудь знает, как получить эти атрибуты из файла изображения с расширением, чтобы сохранить эту информацию в записи базы данных?

Большое спасибо!

ответ

0

Что-то похожее на это должно работать:

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 ​​изображения. Вы можете увидеть другие возможные теги EXIF ​​под exiv2.org/tags.html. Следует отметить, что для изображения не требуется никаких тегов.

+0

Большое спасибо за эту информацию. Это очень помогает. Два дополнения, что это работает. Чтобы заставить StringIO добавить «из StringIO import StringIO» в начале и изменить img на изображение. – guggenbergerl

-1

Вы можете наследовать «ir.attachment» и создать свои поля для метаданных и сохранить эту деталь в модели, и вы можете попробовать найти детали по этому коду.

Файл изображения Get in Encoded Format, поэтому вы можете decode64 throw преобразовать файл и получить изображение и получить метаданные изображения.

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 Refrence Link поможет вам ....

Может быть другое решение, но это время не нашел, так что вы можете попробовать этот код ..

Смежные вопросы