Now each time I save the picture which is plotted by 'matplotlib' on hard disk and then upload it to field.binary() filed;
I want to know whether I could save the picture into field.binary() filed when it was plotted immediately.
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
Now each time I save the picture which is plotted by 'matplotlib' on hard disk and then upload it to field.binary() filed;
I want to know whether I could save the picture into field.binary() filed when it was plotted immediately.
hi Axel, thanks for your reply; I have made some try according to your advice but still failed; my main code is as below:
....
picture=fields.binary()
....
plt.figure(figsize=(8.2, 6))
plt.bar(xTem, aa, width=0.35, facecolor='lightskyblue', edgecolor='white', label='aa') xTem = [x + 0.35 for x in xTem] plt.bar(xTem, Aa, width=0.35, facecolor='yellowgreen', edgecolor='white', label='Aa')
plt.savefig('d:\a1.png')
pic_data = open('d:\a1.png', 'rb').read()
self.write({'picture': base64.encodestring(pic_data)})
These code run well, but I should save it to hard disk first and then upload;
how shall I "save it into the binary fields"?
that's because you are saving it to the disk and it's not needed, savefig could handle a file like object as states http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.savefig
you could do:
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
pic_data = StringIO()
plt.savefig(pic_data)
self.write({'picture': base64.encodestring(pic_data.getvalue())})
thanks a lot; it is very useful.
but some time I get error as below(not each time, and i don;t know whether it has relationship with the new code.):
Traceback (most recent call last):
File "D:\programs\anaconda2\lib\SocketServer.py", line 596, in process_request_thread
self.finish_request(request, client_address)
File "D:\programs\anaconda2\lib\SocketServer.py", line 331, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "D:\programs\anaconda2\lib\SocketServer.py", line 654, in __init__
self.finish()
File "D:\programs\anaconda2\lib\SocketServer.py", line 713, in finish
self.wfile.close()
File "D:\programs\anaconda2\lib\socket.py", line 283, in close
self.flush()
File "D:\programs\anaconda2\lib\socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053]
Hi @vx2008
just get the image value data as a base64 encoded string to save it into the binary fields and you will be ok
Here you can get this answer
https://stackoverflow.com/questions/18766060/python-matplotlib-to-smtplib/21862555#21862555
Create an account today to enjoy exclusive features and engage with our awesome community!
Sign up
1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.