#!/usr/local/bin/python
# $Id: NokiaImagePlugin.py.html,v 1.4 2006/09/19 09:42:30 john Exp $
#
# JW
import Image, ImageFile, ImagePalette, struct
class NokiaOTAImageFile(ImageFile.ImageFile):
format = 'Nokia OTA'
format_description = 'Nokia OTA Bitmap "Operator Logo"'
def _open(self):
icons, width, height, bpp = struct.unpack('BBBB', self.fp.read(4))
self.mode = '1'
self.size = ( width, height )
self.tile = [ ( "raw", ( 0, 0, width, height ), 4, ( self.mode, 0, 1 ) ) ]
self.info['icons'] = icons
class NokiaGMSImageFile(ImageFile.ImageFile):
format = 'Nokia GMS'
format_description = 'Nokia GMS Bitmap "Picture Message"'
def _open(self):
self.fp.seek(3)
msglen = ord(self.fp.read(1))
self.info['message'] = self.fp.read(msglen)
self.fp.seek(3, 1)
icons, width, height, bpp = struct.unpack('BBBB', self.fp.read(4))
self.mode = '1'
self.size = ( width, height )
self.tile = [ ( "raw", ( 0, 0, width, height ), self.fp.tell(), ( self.mode, 0, 1 ) ) ]
self.info['icons'] = icons
def _save(im, fp, filename):
if im.mode != '1':
raise StandardError("Image must be in 1-bpp mode")
if im.encoderinfo.has_key("message"):
message = im.encoderinfo["message"]
else:
message = ""
# If a message exists then we write a GMS, otherwise an OTB.
if message:
fp.write(struct.pack("BBBB", 0x30, 0, 0, len(message)))
fp.write(message)
fp.write(struct.pack("BBB", 2, 1, 0))
fp.write(struct.pack("BBBB", 0, im.size[0], im.size[1], 1))
ImageFile._save(im, fp, [ ( "raw", ( 0, 0 ) + im.size, 0, "1" ) ])
try:
fp.flush()
except:
pass
Image.register_open("Nokia OTA", NokiaOTAImageFile)
Image.register_extension("Nokia OTA", ".otb")
Image.register_open("Nokia GMS", NokiaGMSImageFile)
Image.register_extension("Nokia GMS", ".gms")
Image.register_save("Nokia OTA", _save)
Image.register_save("Nokia GMS", _save)