From: <md...@us...> - 2010-07-06 20:25:57
|
Revision: 8523 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8523&view=rev Author: mdboom Date: 2010-07-06 20:25:51 +0000 (Tue, 06 Jul 2010) Log Message: ----------- Support optional JPEG and TIFF saving if PIL is installed. Modified Paths: -------------- trunk/matplotlib/FILETYPES trunk/matplotlib/lib/matplotlib/backend_bases.py trunk/matplotlib/lib/matplotlib/backends/backend_agg.py Modified: trunk/matplotlib/FILETYPES =================================================================== --- trunk/matplotlib/FILETYPES 2010-07-06 15:49:23 UTC (rev 8522) +++ trunk/matplotlib/FILETYPES 2010-07-06 20:25:51 UTC (rev 8523) @@ -5,30 +5,33 @@ Each cell specifies the backend that actually handles the file format. A cell with a '+' in it denotes the rasterizer and the file writing -infrastructure as separate pieces. +infrastructure as separate pieces. +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ | |bmp |emf |eps |jpeg |pcx |pdf |png |ps |raw |svg |svgz |tiff |xpm | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|Agg | |emf |ps | | |pdf |agg * |ps |agg |svg |svg | | | +|Agg | |emf |ps |agg + | |pdf |agg * |ps |agg |svg |svg |agg +| | +| | | | |pil | | | | | | | |pil | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ |Cairo | |emf |ps | | |cairo |cairo |cairo|agg |cairo|cairo| | | |[1] | | |[2] | | | |* | | | | | | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|CocoaAgg| |emf |ps | | |pdf |agg * |ps |agg |svg |svg | | | +|CocoaAgg| |emf |ps |agg + | |pdf |agg * |ps |agg |svg |svg |agg +| | +| | | | |pil | | | | | | | |pil | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ |Emf | |emf *| | | | | | | | | | | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|FltkAgg | |emf |ps | | |pdf |agg * |ps |agg |svg |svg | | | +|FltkAgg | |emf |ps |agg + | |pdf |agg * |ps |agg |svg |svg |agg +| | +| | | | |pil | | | | | | | |pil | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ |Gd | | | | | | |gd * | | | | | | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|Gtk | |emf |ps |gdk + | |pdf |gdk + |ps |agg |svg |svg | | | -|(gdk) | | | |pixbuf | | |pixbuf| | | | | | | +|Gtk | |emf |ps |gdk + | |pdf |gdk + |ps |agg |svg |svg |agg +| | +|(gdk) | | | |pixbuf | | |pixbuf| | | | |pil | | | | | | | | | |* | | | | | | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|GtkAgg | |emf |ps |agg + | |pdf |agg + |ps |agg |svg |svg | | | -| | | | |pixbuf | | |pixbuf| | | | | | | +|GtkAgg | |emf |ps |agg + | |pdf |agg + |ps |agg |svg |svg |agg +| | +| | | | |pixbuf | | |pixbuf| | | | |pil | | | | | | | | | |* | | | | | | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ |GtkCairo| |emf |ps |cairo +| |cairo |cairo |cairo|agg |cairo|cairo| | | @@ -41,18 +44,22 @@ +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ |Ps | | |ps | | | | |ps * | | | | | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|QtAgg | |emf |ps | | |pdf |agg * |ps |agg |svg |svg | | | +|QtAgg | |emf |ps |agg + | |pdf |agg * |ps |agg |svg |svg |agg +| | +| | | | |pil | | | | | | | |pil | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|Qt4Agg | |emf |ps | | |pdf |agg * |ps |agg |svg |svg | | | +|Qt4Agg | |emf |ps |agg + | |pdf |agg * |ps |agg |svg |svg |agg +| | +| | | | |pil | | | | | | | |pil | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ |Svg | | | | | | | | | |svg *|svg | | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|TkAgg | |emf |ps | | |pdf |agg * |ps |agg |svg |svg | | | +|TkAgg | |emf |ps |agg + | |pdf |agg * |ps |agg |svg |svg |agg +| | +| | | | |pil | | | | | | | |pil | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ |Wx |wx + |emf |ps |wx + wx|wx + |pdf |wx + |ps |agg |svg |svg |wx + |wx + | | |wx | | | |wx | |wx * | | | | |wx |wx | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ -|WxAgg | |emf |ps | | |pdf |agg * |ps |agg |svg |svg | | | +|WxAgg | |emf |ps |agg + | |pdf |agg * |ps |agg |svg |svg |agg +| | +| | | | |pil | | | | | | | |pil | | +--------+-----+-----+-----+-------+-----+------+------+-----+-----+-----+-----+-----+-----+ * Default filetype for the backend Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-07-06 15:49:23 UTC (rev 8522) +++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-07-06 20:25:51 UTC (rev 8523) @@ -41,8 +41,12 @@ import matplotlib.textpath as textpath from matplotlib.path import Path +try: + import Image + _has_pil = True +except ImportError: + _has_pil = False - _backend_d = {} def register_backend(format, backend_class): @@ -1721,6 +1725,40 @@ svg = self.switch_backends(FigureCanvasSVG) return svg.print_svgz(*args, **kwargs) + if _has_pil: + filetypes['jpg'] = filetypes['jpeg'] = 'Joint Photographic Experts Group' + def print_jpg(self, filename_or_obj, *args, **kwargs): + """ + Supported kwargs: + + *quality*: The image quality, on a scale from 1 (worst) to + 95 (best). The default is 75. Values above 95 should + be avoided; 100 completely disables the JPEG + quantization stage. + + *optimize*: If present, indicates that the encoder should + make an extra pass over the image in order to select + optimal encoder settings. + + *progressive*: If present, indicates that this image + should be stored as a progressive JPEG file. + """ + from backends.backend_agg import FigureCanvasAgg # lazy import + agg = self.switch_backends(FigureCanvasAgg) + buf, size = agg.print_to_buffer() + image = Image.frombuffer('RGBA', size, buf, 'raw', 'RGBA', 0, 1) + return image.save(filename_or_obj, **kwargs) + print_jpeg = print_jpg + + filetypes['tif'] = filetypes['tiff'] = 'Tagged Image File Format' + def print_tif(self, filename_or_obj, *args, **kwargs): + from backends.backend_agg import FigureCanvasAgg # lazy import + agg = self.switch_backends(FigureCanvasAgg) + buf, size = agg.print_to_buffer() + image = Image.frombuffer('RGBA', size, buf, 'raw', 'RGBA', 0, 1) + return image.save(filename_or_obj) + print_tiff = print_tif + def get_supported_filetypes(self): return self.filetypes Modified: trunk/matplotlib/lib/matplotlib/backends/backend_agg.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2010-07-06 15:49:23 UTC (rev 8522) +++ trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2010-07-06 20:25:51 UTC (rev 8523) @@ -445,3 +445,13 @@ renderer.width, renderer.height, filename_or_obj, self.figure.dpi) renderer.dpi = original_dpi + + def print_to_buffer(self): + FigureCanvasAgg.draw(self) + renderer = self.get_renderer() + original_dpi = renderer.dpi + renderer.dpi = self.figure.dpi + result = (renderer._renderer.buffer_rgba(0, 0), + (int(renderer.width), int(renderer.height))) + renderer.dpi = original_dpi + return result This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |