[Tutor] problem in converting pixel data to image file
Lie Ryan
lie.1296 at gmail.com
Mon Aug 18 15:02:30 CEST 2008
On Mon, 2008-08-18 at 16:24 +0530, Ashish Sethi wrote:
> Hey Lie,
> Thanks for replying so promptly.
> Here is my real problem which I posted as a new post:-
You should always Reply-to-all so everybody in the tutor-list could see
the response.
> I have a problem in converting between different RGB color spaces.I
> have a jpeg file in rgb mode.
> The rgb data by default is in RGB[8:8:8] mode...i.e, 8 bits(1 byte)
> per band(r,g,b).
> I need to convert it into RGB[4:4:4] format by getting the rgb
> information of each pixel in the image
> and converting the ascii values obtained for the R,G and B bands into
> binary form and then clip the least significant 4 bits
> from this binary no. to form a 4 bit binary value and then convert
> this back to ascii and and save the new information back
> to the image file. Untill now, I have been able obtain the pixel
> information of my image file using :
> > >>> im = Image.open("image.jpg")
> > >>> pix = im.load()
> > >>> pix[0, 0]
> > (226, 162, 125)
>
> 1.Now, how do i convert this ascii data to binary?
You mean you want to convert the string 'A' to its binary value 65? Use
the built-in function ord('A'). But the problem you seems to be having,
I think, isn't about that. pix[0, 0] returns a tuple that contains the
three integers for each RGB. So you just need to do something like this
(sort of):
for r, g, b in pix:
# do something with r, g ,b
> 2.how do i mask last 4 bits ( least significant bits )?
I think some it, bit-wise operation would do:
http://docs.python.org/ref/bitwise.html
How to bit-mask: http://en.wikipedia.org/wiki/Mask_(computing)
>>> v1 = int('01000101', 2)
>>> v2 = int('11110000', 2)
>>> print v1, v2
69 240
>>> # 69 (base-10) is 01000101 (base-2)
>>> # 240 (base-10) is 11110000 (base-2)
>>> print v1 & v2 # bit-wise and
65
>>> # 65 (base-10) is 01000000 (base-2)
>>> # 01000101 bitwise-and 11110000 is 01000000
> 3.also, I need to convert the same image to RGB[12:12:12] mode,for
> which i need to zero pad with 4 zeroes the
> binary RGB[8:8:8] data. How do I do this?
> So, regarding my initial problem...once i solve this problem...i will
> have the pixel wise data in
> an array or list...so to write this data back to the image file...i
> have to use fromarray command
I'm not aware that PIL has a fromarray command, do you mean fromstring?
> .But that unfortunately isnt giving back an image file...
I think JPEG (at least PIL's JPEG) doesn't support 4-bit/color and
12-bit/color representation. JPEG supports 'L'uminance (8-bit/pixel),
RGB (8-bit/color), CMYK (I'm not sure). You probably need another image
format, one that support 12-bit/color format (I'm not aware if any
popular image format supports that, but I'm not imaging expert)
> I would also appreciate any help you could offer me regarding the new
> problem.
>
> Looking forward to your reply
>
>
>
>
>
> On 8/18/08, Lie Ryan <lie.1296 at gmail.com> wrote:
> > Message: 3
> > Date: Mon, 18 Aug 2008 14:30:08 +0530
> > From: "Ashish Sethi" <ashishbitsgoa at gmail.com>
> > Subject: [Tutor] problem in converting pixel data to image
> file
> > To: tutor at python.org
> > Message-ID:
> >
> <edb5c69c0808180200g62b34859j7441d4587d82276b at mail.gmail.com>
> > Content-Type: text/plain; charset="utf-8"
> >
> > Hi all,
> > I have a problem in converting the pixel data (read from a
> string and
> > written to a file using fromstring command in PIL ).
> > The file handle of this file is called buffer. Now, when I
> tried to
> > open the
> > file as an image file but it didnt work.
>
> What is the format of the image you want to open? PIL doesn't
> support
> all image format in the world (of course), but the most common
> ones are
> supported. fromstring, by default, assumes that the string
> you're
> passing it is in raw format (i.e. the definition of raw format
> is
> explained PIL's documentation)
>
> > Then I read the documentation of PIL and found this written
> about
> > fromstring
> > function
> > "Note that this function decodes pixel data, not entire
> images. If you
> > have an entire image in a string, wrap it in a *StringIO
> *object, and
> > use
> > *open *to load it."
>
> StringIO is simply a wrapper around string to make it have a
> file-like
> interface (since Python uses Duck Typing principle, if an
> object has the
> same members a file-object have, like read(), write(),
> readlines(), etc
> python should not differentiate them)
>
> > so i wrote the following code....
> >
> > file = StringIO.StringIO(buffer)
> > img = Image.open(file)
> > img.save(file, 'JPEG')
> >
> > *Error:*
> > img = Image.open(file)
> > File
> "/home/rahhal/python/lib/python2.4/site-packages/PIL/Image.py",
> > line
> > 1745, in open
> > raise IOError("cannot identify image file")
> > IOError: cannot identify image file
>
> PIL is it cannot identify what format the original image is
> in, either
> you pass explicitly what format the original file is in, or
> (at the
> worst case) you create (or search whether one is available on
> the
> internet) your own decoder.
>
> PS: List of image format supported by PIL (you can also find
> it in PIL's
> documentation):
> BMP
> BUFR (identify only)
> CUR (read only)
> DCX (read only)
> EPS (write-only)
> FITS (identify only)
> FLI, FLC (read only)
> FPX (read only)
> GBR (read only)
> GD (read only)
> GIF
> GRIB (identify only)
> HDF5 (identify only)
> ICO (read only)
> IM
> IMT (read only)
> IPTC/NAA (read only)
> JPEG
> MCIDAS (read only)
> MIC (read only)
> MPEG (identify only)
> MSP
> PALM (write only)
> PCD (read only)
> PCX
> PDF (write only)
> PIXAR (read only)
> PNG
> PPM
> PSD (read only)
> SGI (read only)
> SPIDER
> TGA (read only)
> TIFF
> WAL (read only)
> WMF (identify only)
> XBM
> XPM (read only)
> XV Thumbnails
>
> > Can any one please help in solving my problem??
> > -------------- next part --------------
> > An HTML attachment was scrubbed...
> > URL:
> >
> <http://mail.python.org/pipermail/tutor/attachments/20080818/e7a1c2bd/attachment-0001.htm>
> >
> > ------------------------------
>
>
More information about the Tutor
mailing list