Base64 sang png trăn

Tôi vẫn đang làm việc để chuyển mô-đun https. //www. odoo. com/ứng dụng/mô-đun/10. 0/product_default_image/ sang Odoo 11. 0

Khi cố gắng lưu một hình ảnh PNG với đoạn mã sau trong tệp rescompany. py

@api.model
def _get_default_image[self]:
with open[modules.get_module_resource['product_default_image',
'static/src/img',
'glob_prod_img.png'],
'rb'] as f:
return base64.b64encode[f.read[]]

product_image = fields.Binary[
string='Global Product Image',
default=_get_default_image,
help='Use as the global image for all product default images. '
'Limited to 1024x1024.',
]


@api.multi
def write[self, vals]:
""" Changes product images if target or product_image have changed """

target = vals.get['product_image_target']

if 'product_image' not in vals and not target:
return super[ResCompany, self].write[vals]

if 'product_image' in vals:
vals['product_image'] = \
tools.image_resize_image_big[
base64_source=vals['product_image'],
]

Tôi nhận được thông báo lỗi sau

Error:
Odoo Server Error

Traceback [most recent call last]:
File "/usr/lib/python3.6/base64.py", line 510, in _input_type_check
m = memoryview[s]
TypeError: memoryview: a bytes-like object is required, not 'str'

The above exception was the direct cause of the following exception:

Traceback [most recent call last]:
File "/usr/lib/python3.6/encodings/base64_codec.py", line 19, in base64_decode
return [base64.decodebytes[input], len[input]]
File "/usr/lib/python3.6/base64.py", line 545, in decodebytes
_input_type_check[s]
File "/usr/lib/python3.6/base64.py", line 513, in _input_type_check
raise TypeError[msg] from err
TypeError: expected bytes-like object, not str

The above exception was the direct cause of the following exception:

Traceback [most recent call last]:
File "/usr/lib/python3/dist-packages/odoo/http.py", line 653, in _handle_exception
return super[JsonRequest, self]._handle_exception[exception]
File "/usr/lib/python3/dist-packages/odoo/http.py", line 312, in _handle_exception
raise pycompat.reraise[type[exception], exception, sys.exc_info[][2]]
File "/usr/lib/python3/dist-packages/odoo/tools/pycompat.py", line 87, in reraise
raise value
File "/usr/lib/python3/dist-packages/odoo/http.py", line 695, in dispatch
result = self._call_function[**self.params]
File "/usr/lib/python3/dist-packages/odoo/http.py", line 344, in _call_function
return checked_call[self.db, *args, **kwargs]
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 97, in wrapper
return f[dbname, *args, **kwargs]
File "/usr/lib/python3/dist-packages/odoo/http.py", line 337, in checked_call
result = self.endpoint[*a, **kw]
File "/usr/lib/python3/dist-packages/odoo/http.py", line 939, in __call__
return self.method[*args, **kw]
File "/usr/lib/python3/dist-packages/odoo/http.py", line 517, in response_wrap
response = f[*args, **kw]
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 934, in call_kw
return self._call_kw[model, method, args, kwargs]
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 926, in _call_kw
return call_kw[request.env[model], method, args, kwargs]
File "/usr/lib/python3/dist-packages/odoo/api.py", line 687, in call_kw
return call_kw_model[method, model, args, kwargs]
File "/usr/lib/python3/dist-packages/odoo/api.py", line 672, in call_kw_model
result = method[recs, *args, **kwargs]
File "/usr/lib/python3/dist-packages/odoo/addons/account/models/res_config_settings.py", line 152, in create
return super[ResConfigSettings, self].create[values]
File "/usr/lib/python3/dist-packages/odoo/models.py", line 3402, in create
self._fields[key].determine_inverse[record]
File "/usr/lib/python3/dist-packages/odoo/fields.py", line 1082, in determine_inverse
self.inverse[records]
File "/usr/lib/python3/dist-packages/odoo/fields.py", line 599, in _inverse_related
other[field.name] = record_value[record]
File "/usr/lib/python3/dist-packages/odoo/models.py", line 4794, in __setitem__
return self._fields[key].__set__[self, value]
File "/usr/lib/python3/dist-packages/odoo/fields.py", line 987, in __set__
record.write[{self.name: write_value}]
File "/usr/lib/python3/dist-packages/odoo/addons/product_default_image/models/res_company.py", line 76, in write
base64_source=vals['product_image'],
File "/usr/lib/python3/dist-packages/odoo/tools/image.py", line 143, in image_resize_image_big
return image_resize_image[base64_source, size, encoding, filetype, avoid_if_small]
File "/usr/lib/python3/dist-packages/odoo/tools/image.py", line 56, in image_resize_image
image_stream = io.BytesIO[codecs.decode[base64_source, encoding]]
TypeError: decoding with 'base64' codec failed [TypeError: expected bytes-like object, not str]

Làm cách nào để viết mã chính xác mã này cho Python3/Odoo 11?

Cảm ơn cho bất kỳ gợi ý




Nhận xét Chia sẻ

Đăng bình luận Hủy bỏ

1Trả lời

2

Rajkumar Murugan

26 tháng bảy 2019

Câu trả lời hay nhất

Xin chào,

Tham khảo liên kết này

https. // stackoverflow. com/câu hỏi/2323128/convert-string-in-base64-to-image-and-save-on-filesystem-in-python


Nhận xét Chia sẻ

1 Nhận xét

Đăng bình luận Hủy bỏ

Ermin Trevisan

- 26 tháng 7 năm 2019

Xóa bỏ

Chuyển đổi thành câu trả lời

Cảm ơn bạn đã gợi ý, tôi hiểu hướng đi, nhưng tại sao nó không được xử lý bởi các công cụ từ hình ảnh. py trong Odoo 11? . Có thiếu thứ gì trong @api của tôi không. kiểu mẫu?

Làm cách nào để chuyển đổi hình ảnh Base64 thành hình ảnh Python?

Làm cách nào để lấy hình ảnh từ Base64 trong Python? .
Đầu tiên chúng tôi nhập Base64
Lưu trữ dữ liệu đã được đọc từ tệp vào một biến
Sau đó, chỉ cần đặt bất kỳ tên tệp hình ảnh nào [ví dụ:. ”myimage. png”] Và mở nó ở chế độ wb Viết ở dạng nhị phân
Giải mã nhị phân với b64. giải mã [] Sau đó Đóng tệp bằng. đóng lại[]

Làm cách nào để chuyển đổi cơ số 64 sang png?

Cách chuyển đổi tệp BASE64 bằng Aspose. .
Tải lên tệp BASE64 hoặc dán mã BASE64 vào vùng văn bản
Dữ liệu BASE64 của bạn sẽ được tải lên và sẽ được chuyển đổi sang định dạng PNG
Liên kết tải xuống của các tệp PNG sẽ có sẵn ngay lập tức sau khi chuyển đổi

Làm cách nào để chuyển đổi Base64 sang định dạng hình ảnh?

Chuyển đổi Base64 thành hình ảnh trực tuyến bằng công cụ giải mã miễn phí cho phép bạn giải mã Base64 dưới dạng hình ảnh và xem trước trực tiếp trong trình duyệt. .
Dán chuỗi của bạn vào trường “Base64”
Nhấn nút “Giải mã Base64 thành hình ảnh”
Nhấp vào liên kết tên tệp để tải xuống hình ảnh

Làm cách nào để chuyển đổi PNG sang Base64 Python?

Chuyển đổi hình ảnh thành chuỗi base64 trong Python .
Mở một tệp hình ảnh
đọc dữ liệu hình ảnh
mã hóa nó trong base64 bằng mô-đun base64 trong Python
In chuỗi

Chủ Đề