This LOOKS like a bug in Windows XP which creates .BMP files via DirectX with an incorrect bitmap header size (54 vice 40). Changing the 54 to 40 makes the file readable again. Most utilities seem to ignore this but Windows itself won't be able to 'read' it as a .BMP file.
(using XP SP2 and DirectX 9.0c ... I haven't tried this on Vista yet) On Fri, Mar 6, 2009 at 5:50 AM, Wichert Akkerman <wich...@simplon.biz>wrote: > The first image: > > >>> i=PIL.Image.open(open("/Users/wichert/Desktop/dont.bmp")) > >>> i > <PIL.BmpImagePlugin.BmpImageFile instance at 0x43f490> > >>> i.mode > 'RGB' > >>> i.size > (290, 4294967075L) > >>> i.tile > [('raw', (0, 0, 290, 4294967075L), 54, ('BGR', 872, -1))] > > and the second image: > > >>> i=PIL.Image.open(open("/Users/wichert/Desktop/dont2.bmp")) > >>> i.mode > 'RGB' > >>> i.size > (288, 4294967078L) > >>> i.tile > [('raw', (0, 0, 288, 4294967078L), 54, ('BGR', 864, -1))] > > > Regards, > Wichert. > > > On 3/5/09 6:41 PM, Fredrik Lundh wrote: > >> Can you print the following attributes for a broken file, before calling >> load: >> >> pil_data.mode >> pil_data.size >> pil_data.tile >> >> </F> >> >> 2009/3/3 Wichert Akkerman<wich...@simplon.biz>: >> >> >>> I have a small routine which tries to verify if an uploaded file is a >>> valid >>> image. It works like this: >>> >>> image_data=StringIO(data) >>> try: >>> pil_data=PIL.Image.open(image_data) >>> except IOError: # PIL abuses IOError to report parsing errors >>> raise Invalid(self.message("bad_image", state), >>> value, state) >>> >>> pil_data.load() >>> (width,height)=pil_data.size >>> >>> For some images I get an OverflowError on the load() call: >>> >>> Module PIL.ImageFile:155 in load >>> >>> >>>> self.load_prepare() >>>>> >>>>> >>>> Module PIL.ImageFile:223 in load_prepare >>> >>> >>>> self.im = Image.core.new(self.mode, self.size) >>>>> >>>>> >>>> OverflowError: long int too large to convert to int >>> >>> I can not find any information as to what the problem might be. It seems >>> to >>> only occur for bmp files; jpeg and png appear to work correctly. >>> >>> This is using PIL 1.1.6 and Python 2.5 on a Linux system. >>> >>> Wichert. >>> << self.map = None >>> >>> self.load_prepare() >>> >>> # look for read/seek overrides >>> << if not self.im or\ >>> self.im.mode != self.mode or self.im.size != self.size: >>> self.im = Image.core.new(self.mode, self.size) >>> # create palette (optional) >>> if self.mode == "P": >>> _______________________________________________ >>> Image-SIG maillist - Image-SIG@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 > > -- Howard Lightstone hlightst...@gmail.com how...@eegsoftware.com
_______________________________________________ Image-SIG maillist - Image-SIG@python.org http://mail.python.org/mailman/listinfo/image-sig