14
14
# See the README file for information on usage and redistribution.
17
import Image, ImageFile
17
from . import Image, ImageFile, _binary
22
24
def nextheader(fobj):
23
25
return struct.unpack('>4sI', fobj.read(HEADERSIZE))
25
def read_32t(fobj, (start, length), (width, height)):
27
def read_32t(fobj, start_length, size):
26
28
# The 128x128 icon seems to have an extra header for some reason.
29
(start, length) = start_length
29
if sig != '\x00\x00\x00\x00':
30
raise SyntaxError, 'Unknown signature, expecting 0x00000000'
31
return read_32(fobj, (start + 4, length - 4), (width, height))
32
if sig != b'\x00\x00\x00\x00':
33
raise SyntaxError('Unknown signature, expecting 0x00000000')
34
return read_32(fobj, (start + 4, length - 4), size)
33
def read_32(fobj, (start, length), size):
36
def read_32(fobj, start_length, size):
35
38
Read a 32bit RGB icon resource. Seems to be either uncompressed or
36
39
an RLE packbits-like scheme.
41
(start, length) = start_length
39
43
sizesq = size[0] * size[1]
40
44
if length == sizesq * 3:
68
72
"Error reading channel [%r left]" % bytesleft
70
74
band = Image.frombuffer(
71
"L", size, string.join(data, ""), "raw", "L", 0, 1
75
"L", size, b"".join(data), "raw", "L", 0, 1
73
77
im.im.putband(band.im, band_ix)
76
def read_mk(fobj, (start, length), size):
80
def read_mk(fobj, start_length, size):
77
81
# Alpha masks seem to be uncompressed
82
(start, length) = start_length
79
84
band = Image.frombuffer(
80
85
"L", size, fobj.read(size[0]*size[1]), "raw", "L", 0, 1
112
117
sig, filesize = nextheader(fobj)
113
118
if sig != 'icns':
114
raise SyntaxError, 'not an icns file'
119
raise SyntaxError('not an icns file')
116
121
while i < filesize:
117
122
sig, blocksize = nextheader(fobj)
204
Image.register_open("ICNS", IcnsImageFile, lambda x: x[:4] == 'icns')
209
Image.register_open("ICNS", IcnsImageFile, lambda x: x[:4] == b'icns')
205
210
Image.register_extension("ICNS", '.icns')
207
212
if __name__ == '__main__':