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