SourceForge logo
SourceForge logo
Menu

matplotlib-devel

From: Robert K. <rk...@uc...> - 2005年08月31日 04:17:03
John Hunter wrote:
>>>>>>"Sascha" == Sascha <sas...@gm...> writes:
> 
> 
> Sascha> I am writing a web server app that creates charts among
> Sascha> other things. I am trying to get rid of the temporary file
> Sascha> that I use to transmit the figures created with matplotlib
> Sascha> to the actual web server. Although print_figure says "If
> Sascha> filename is a fileobject, write png to file object (thus
> Sascha> you can, for example, write the png to stdout)" I can't
> Sascha> successfully write anything to stdout. Anyone knows an
> Sascha> example or can give me some hint what I can do to get rid
> Sascha> of the tempfile?
> 
> Short answer: no known way to do this currently, though we'd like to
> figure it out. As far as I know (and could very well be wrong)
> libpng requires a FILE*, which StringIO and cStringIO do not provide.
StringIO isn't the issue here; being able to write to sys.stdout, which
ought to have a valid FILE* underneath, is the issue.
Why not use PIL where it's available? backend_agg2.py has a start at
this. Here's a slightly more fleshed-out (but untested) implementation
for backend_agg.py :
 if not is_string_like(filename):
 try:
 import Image
 have_pil = True
 except ImportError:
 have_pil = False
 if have_pil:
 img = Image.frombuffer('RGBA', (self.width, self.height),
 self.buffer_rgba(0, 0))
 img.write(filename)
 else:
 self.renderer._renderer.write_png(filename)
-- 
Robert Kern
rk...@uc...
"In the fields of hell where the grass grows high
 Are the graves of dreams allowed to die."
 -- Richard Harter
From: Nicholas Y. <su...@su...> - 2005年08月31日 10:04:03
On Tue, 2005年08月30日 at 21:16 -0700, Robert Kern wrote:
> Why not use PIL where it's available? backend_agg2.py has a start at
> this. Here's a slightly more fleshed-out (but untested) implementation
> for backend_agg.py :
> 
> if not is_string_like(filename):
> try:
> import Image
> have_pil = True
> except ImportError:
> have_pil = False
> if have_pil:
> img = Image.frombuffer('RGBA', (self.width, self.height),
> self.buffer_rgba(0, 0))
> img.write(filename)
> else:
> self.renderer._renderer.write_png(filename)
I've previously had a problem with the origin when doing something
similar with buffer_rgba (resulting in a vertical flip). Doing:
 im = Image.frombuffer('RGBA', (self.width, self.height),
 self.buffer_rgba(0, 0),
 'raw', 'RGBA', 0, 1)
fixes that problem.
If a method utilising PIL images in this manner is added I'd suggest
adding a to_pil (or similar) method for those who want to process the
resulting image in some manner requiring PIL.
Nick
From: John H. <jdh...@ac...> - 2005年08月31日 14:16:42
>>>>> "Robert" == Robert Kern <rk...@uc...> writes:
 Sascha> I am writing a web server app that creates charts among
 Sascha> other things. I am trying to get rid of the temporary file
 Sascha> that I use to transmit the figures created with matplotlib
 Sascha> to the actual web server. Although print_figure says "If
 Sascha> filename is a fileobject, write png to file object (thus
 Sascha> you can, for example, write the png to stdout)" I can't
 Sascha> successfully write anything to stdout. Anyone knows an
 Sascha> example or can give me some hint what I can do to get rid
 Sascha> of the tempfile?
 >> Short answer: no known way to do this currently, though we'd
 >> like to figure it out. As far as I know (and could very well
 >> be wrong) libpng requires a FILE*, which StringIO and cStringIO
 >> do not provide.
 Robert> StringIO isn't the issue here; being able to write to
 Robert> sys.stdout, which ought to have a valid FILE* underneath,
 Robert> is the issue.
Thanks for reminding me about this. I thought it was possible to do
this, but had managed to forget
 import sys
 from pylab import plot, savefig, show
 plot([1,2,3])
 savefig(sys.stdout)
 show()
which I run with 
 > python test.py -dAgg > test.png
produces the expected figure.
JDH
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /