Just committed a fix to trunk (including some simple tests for this operation & mode...).
Thanks! /F On Fri, Oct 8, 2010 at 6:51 AM, David Coles <coles.da...@gmail.com> wrote: > PIL's Image class has incorrect dimension specified for YCbCr images. > This causes issues when converting to or from NumPy arrays. > > According to http://www.pythonware.com/library/pil/handbook/concepts.htm > YCbCr should be "3x8-bit pixels, colour video format". Instead it > appears to be converted to a 4x8-bit format. > > The incorrect definition is at line 206 of > http://svn.effbot.python-hosting.com/pil/PIL/Image.py. > > Example: Load up any image and convert to YCbCr. > >>>> import numpy >>>> import Image as im >>>> image = im.open('bush640x360.png') >>>> ycbcr = image.convert('YCbCr') > > Using the Array interface produces a HxWx4 array, which is the wrong > dimensions for YCbCr. Thus when selecting a single channel it displays > incorrectly: > >>>> A = numpy.asarray(ycbcr) >>>> print A.shape > (360, 640, 4) >>>> im.fromarray(A[:,:,0], "L").show() > > Here's an example decoding the image byte string ourselves gives the > correct result: > >>>> B = numpy.ndarray((image.size[1], image.size[0], 3), 'u1', > ycbcr.tostring()) >>>> print B.shape > (360, 640, 3) >>>> im.fromarray(B[:,:,0], "L").show() > > Attached is a patch against the 1.1.7-2 (python-imaging) package in > Ubuntu as I can't find the development repository for 1.1.7. See > https://bugs.edge.launchpad.net/ubuntu/+source/python-imaging/+bug/656666 for > details. > > Cheers, > David > > _______________________________________________ > Image-SIG maillist - image-...@python.org > http://mail.python.org/mailman/listinfo/image-sig > > _______________________________________________ Image-SIG maillist - Image-SIG@python.org http://mail.python.org/mailman/listinfo/image-sig