[Image-SIG] OverflowError on image save

Howard Lightstone howard at eegsoftware.com
Fri Mar 6 16:52:57 CET 2009


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 <wichert at 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<wichert at 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 at python.org
>>> http://mail.python.org/mailman/listinfo/image-sig
>>>
>>>
>>>
>>>
>>
> _______________________________________________
> Image-SIG maillist  -  Image-SIG at python.org
> http://mail.python.org/mailman/listinfo/image-sig
>
>


-- 
Howard Lightstone
hlightstone at gmail.com
howard at eegsoftware.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/image-sig/attachments/20090306/bd1b499f/attachment.htm>


More information about the Image-SIG mailing list