From: <jd...@us...> - 2008-10-20 14:09:38
|
Revision: 6282 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6282&view=rev Author: jdh2358 Date: 2008-10-20 14:09:30 +0000 (Mon, 20 Oct 2008) Log Message: ----------- added image.thumbnail function Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/doc/_static/logo_sidebar_horiz.png trunk/matplotlib/examples/tests/backend_driver.py trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/image.py trunk/matplotlib/matplotlibrc.template trunk/matplotlib/setupext.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2008-10-20 09:04:54 UTC (rev 6281) +++ trunk/matplotlib/CHANGELOG 2008-10-20 14:09:30 UTC (rev 6282) @@ -1,3 +1,7 @@ +2008-10-20 Added image thumbnail generating function + matplotlib.image.thumbnail. See + examples/misc/image_thumbnail.py - JDH + 2008-10-20 Applied scatleg patch based on ideas and work by Erik Tollerud and Jae-Joon Lee. - MM Modified: trunk/matplotlib/doc/_static/logo_sidebar_horiz.png =================================================================== (Binary files differ) Modified: trunk/matplotlib/examples/tests/backend_driver.py =================================================================== --- trunk/matplotlib/examples/tests/backend_driver.py 2008-10-20 09:04:54 UTC (rev 6281) +++ trunk/matplotlib/examples/tests/backend_driver.py 2008-10-20 14:09:30 UTC (rev 6282) @@ -28,7 +28,7 @@ 'alignment_test.py', 'arctest.py', 'arrow_demo.py', - 'auto_layout.py', + #'auto_layout.py', 'axes_demo.py', 'axhspan_demo.py', 'bar_stacked.py', Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2008-10-20 09:04:54 UTC (rev 6281) +++ trunk/matplotlib/lib/matplotlib/axes.py 2008-10-20 14:09:30 UTC (rev 6282) @@ -5453,11 +5453,13 @@ If *None*, default to rc ``image.aspect`` value. *interpolation*: - Acceptable values are *None*, 'nearest', 'bilinear', 'bicubic', - 'spline16', 'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', - 'quadric', 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', - 'lanczos', 'blackman' + Acceptable values are *None*, 'nearest', 'bilinear', + 'bicubic', 'spline16', 'spline36', 'hanning', 'hamming', + 'hermite', 'kaiser', 'quadric', 'catrom', 'gaussian', + 'bessel', 'mitchell', 'sinc', 'lanczos', + + If *interpolation* is *None*, default to rc ``image.interpolation``. See also the *filternorm* and *filterrad* parameters Modified: trunk/matplotlib/lib/matplotlib/image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/image.py 2008-10-20 09:04:54 UTC (rev 6281) +++ trunk/matplotlib/lib/matplotlib/image.py 2008-10-20 14:09:30 UTC (rev 6282) @@ -319,10 +319,9 @@ """ Return the interpolation method the image uses when resizing. - One of - - 'bicubic', 'bilinear', 'blackman100', 'blackman256', 'blackman64', - 'nearest', 'sinc144', 'sinc256', 'sinc64', 'spline16', 'spline36' + One of 'nearest', 'bilinear', 'bicubic', 'spline16', 'spline36', 'hanning', + 'hamming', 'hermite', 'kaiser', 'quadric', 'catrom', 'gaussian', + 'bessel', 'mitchell', 'sinc', 'lanczos', """ return self._interpolation @@ -330,9 +329,11 @@ """ Set the interpolation method the image uses when resizing. - ACCEPTS: ['bicubic' | 'bilinear' | 'blackman100' | 'blackman256' | - 'blackman64', 'nearest' | 'sinc144' | 'sinc256' | 'sinc64' | - 'spline16' | 'spline36'] + ACCEPTS: ['nearest' | 'bilinear' | 'bicubic' | 'spline16' | + 'spline36' | 'hanning' | 'hamming' | 'hermite' | 'kaiser' | + 'quadric' | 'catrom' | 'gaussian' | 'bessel' | 'mitchell' | + 'sinc' | 'lanczos' | ] + """ if s is None: s = rcParams['image.interpolation'] s = s.lower() @@ -764,3 +765,100 @@ x = toarray(im) x.shape = im.size[1], im.size[0], 4 return x + +def thumbnail(fname, scale=0.1, interpolation='bilinear', prefix='thumb_', + outdir=None, preview=False, extension='png'): + """ + make a thumbnail of image in fname with output filename + [OUTDIR]/[PREFIX][BASENAME].EXTENSION where BASENAME is the + filename part of fname without the directory ar extension + + *fname* the image file -- must be PNG or PIL readable if you + have `PIL <http://www.pythonware.com/products/pil/>`_ installed + + *scale* + the scale factor for the thumbnail + + *interpolation* + the interpolation scheme used in the resampling + + *prefix* + the PREFIX of the output file name + + *outdir* + the OUTDIR of the output filenamet - by default same as directory the source image lives in + + *extension* + the EXTENSION for the output filename, one of 'png', 'pdf' or 'ps' + + *preview* + if True, the default backend (presumably a user interface + backend) will be used which will cause a figure to be raised + if :func:`~matplotlib.pyplot.show` is called. If it is False, + a pure image backend will be used depending on the extension, + 'png'->FigureCanvasAgg, 'pdf'->FigureCanvasPDF, + 'svg'->FigureCanvasSVG + + + See examples/misc/image_thumbnail.py. + + .. htmlonly:: + + :ref:`misc-image_thumbnail` + + Return value is the output filename of the thumbnail + + """ + + basedir, basename = os.path.split(fname) + if outdir is None: + if not basedir: + basedir = os.curdir + outdir = basedir + + if not os.path.exists(outdir) or not os.path.isdir(outdir): + raise IOError('output directory "%s" must be a directory'%outdir) + + im = imread(fname) + rows, cols, depth = im.shape + + # this doesn't really matter, it will cancel in the end, but we + # need it for the mpl API + dpi = 100 + + + height = float(rows)/dpi*scale + width = float(cols)/dpi*scale + + extension = extension.lower() + + if preview: + # let the UI backend do everything + import matplotlib.pyplot as plt + fig = plt.figure(figsize=(width, height), dpi=dpi) + else: + if extension=='png': + from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas + from matplotlib.figure import Figure + elif extension=='pdf': + from matplotlib.backends.backend_pdf import FigureCanvasPDF as FigureCanvas + from matplotlib.figure import Figure + elif extension=='svg': + from matplotlib.backends.backend_svg import FigureCanvasSVG as FigureCanvas + from matplotlib.figure import Figure + else: + raise ValueError("Can only handle extension 'png', 'svg' or 'pdf'") + + fig = Figure(figsize=(width, height), dpi=dpi) + canvas = FigureCanvas(fig) + + + + + ax = fig.add_axes([0,0,1,1], aspect='auto', frameon=False, xticks=[], yticks=[]) + + basename, ext = os.path.splitext(basename) + ax.imshow(im, aspect='auto', resample=True, interpolation='bilinear') + outfile = os.path.join(outdir, '%s%s.%s'%(prefix, basename, extension)) + fig.savefig(outfile, dpi=dpi) + return outfile Modified: trunk/matplotlib/matplotlibrc.template =================================================================== --- trunk/matplotlib/matplotlibrc.template 2008-10-20 09:04:54 UTC (rev 6281) +++ trunk/matplotlib/matplotlibrc.template 2008-10-20 14:09:30 UTC (rev 6282) @@ -265,8 +265,8 @@ #image.cmap : jet # gray | jet etc... #image.lut : 256 # the size of the colormap lookup table #image.origin : upper # lower | upper +#image.resample : False - ### CONTOUR PLOTS #contour.negative_linestyle : dashed # dashed | solid Modified: trunk/matplotlib/setupext.py =================================================================== --- trunk/matplotlib/setupext.py 2008-10-20 09:04:54 UTC (rev 6281) +++ trunk/matplotlib/setupext.py 2008-10-20 14:09:30 UTC (rev 6282) @@ -942,6 +942,7 @@ try: tcl_lib = tcl_vars.get("default", "TCL_LIB_SPEC")[1:-1].split()[0][2:] tcl_inc = tcl_vars.get("default", "TCL_INCLUDE_SPEC")[3:-1] + tk_lib = tk_vars.get("default", "TK_LIB_SPEC")[1:-1].split()[0][2:] if tk_vars.has_option("default", "TK_INCLUDE_SPEC"): # On Ubuntu 8.04 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |