From: <jd...@us...> - 2008-05-29 20:17:41
|
Revision: 5306 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5306&view=rev Author: jdh2358 Date: 2008-05-29 13:17:32 -0700 (Thu, 29 May 2008) Log Message: ----------- imread via pil now returns lumininance or rgb if possible Modified Paths: -------------- branches/v0_91_maint/API_CHANGES branches/v0_91_maint/CHANGELOG branches/v0_91_maint/lib/matplotlib/image.py Modified: branches/v0_91_maint/API_CHANGES =================================================================== --- branches/v0_91_maint/API_CHANGES 2008-05-29 18:25:58 UTC (rev 5305) +++ branches/v0_91_maint/API_CHANGES 2008-05-29 20:17:32 UTC (rev 5306) @@ -1,3 +1,8 @@ + matplotlib.image.imread now no longer always returns RGBA -- if + the image is luminance or RGB, it will return a MxN or MxNx3 array + if possible. Also uint8 is no longer always forced to float. + + 0.91.2 Released For csv2rec, checkrows=0 is the new default indicating all rows Modified: branches/v0_91_maint/CHANGELOG =================================================================== --- branches/v0_91_maint/CHANGELOG 2008-05-29 18:25:58 UTC (rev 5305) +++ branches/v0_91_maint/CHANGELOG 2008-05-29 20:17:32 UTC (rev 5306) @@ -1,3 +1,8 @@ +2008-05-29 matplotlib.image.imread now no longer always returns RGBA + -- if the image is luminance or RGB, it will return a MxN + or MxNx3 array if possible. Also uint8 is no longer always + forced to float. + 2008-05-29 Implement path clipping in PS backend - JDH 2008-05-29 Fixed two bugs in texmanager.py: Modified: branches/v0_91_maint/lib/matplotlib/image.py =================================================================== --- branches/v0_91_maint/lib/matplotlib/image.py 2008-05-29 18:25:58 UTC (rev 5305) +++ branches/v0_91_maint/lib/matplotlib/image.py 2008-05-29 20:17:32 UTC (rev 5306) @@ -607,11 +607,15 @@ """ return image file in fname as numpy array - Return value is a MxNx4 array of 0-1 normalized floats + return value is a numpy array. For grayscale images, the return + array is MxN. For RGB images, the return value is MxNx3. For + RGBA images the return value is MxNx4 matplotlib can only read PNGs natively, but if PIL is installed, - it will use it to load the image and return an RGBA if possible + it will use it to load the image and return an array (if possible) which can be used with imshow + + TODO: support RGB and grayscale return values in _image.readpng """ def pilread(): @@ -639,15 +643,39 @@ def pil_to_array( pilImage ): + """ + load a PIL image and return it as a numpy array of uint8. For + grayscale images, the return array is MxN. For RGB images, the + return value is MxNx3. For RGBA images the return value is MxNx4 + """ + def toarray(im): + 'return a 1D array of floats' + x_str = im.tostring('raw',im.mode,0,-1) + x = npy.fromstring(x_str,npy.uint8) + return x + if pilImage.mode in ('RGBA', 'RGBX'): - im = pilImage # no need to convert images in rgba format + im = pilImage # no need to convert images + elif pilImage.mode=='L': + im = pilImage # no need to luminance images + # return MxN luminance array + x = toarray(im) + x.shape = im.size[1], im.size[0] + return x + elif pilImage.mode=='RGB': + #return MxNx3 RGB array + im = pilImage # no need to RGB images + x = toarray(im) + x.shape = im.size[1], im.size[0], 3 + return x + else: # try to convert to an rgba image try: im = pilImage.convert('RGBA') except ValueError: raise RuntimeError('Unknown image mode') - x_str = im.tostring('raw',im.mode,0,-1) - x = npy.fromstring(x_str,npy.uint8) + # return MxNx4 RGBA array + x = toarray(im) x.shape = im.size[1], im.size[0], 4 return x This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |