~ubuntu-branches/ubuntu/wily/python-imaging/wily

« back to all changes in this revision

Viewing changes to .pc/git-updates.diff/PIL/PalmImagePlugin.py

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-01-31 20:49:20 UTC
  • mfrom: (27.1.1 raring-proposed)
  • Revision ID: package-import@ubuntu.com-20130131204920-b5zshy6vgfvdionl
Tags: 1.1.7+1.7.8-1ubuntu1
Rewrite build dependencies to allow cross builds.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# The Python Imaging Library.
 
3
# $Id$
 
4
#
 
5
 
 
6
##
 
7
# Image plugin for Palm pixmap images (output only).
 
8
##
 
9
 
 
10
__version__ = "1.0"
 
11
 
 
12
import Image, ImageFile
 
13
 
 
14
_Palm8BitColormapValues = (
 
15
    ( 255, 255, 255 ), ( 255, 204, 255 ), ( 255, 153, 255 ), ( 255, 102, 255 ),
 
16
    ( 255,  51, 255 ), ( 255,   0, 255 ), ( 255, 255, 204 ), ( 255, 204, 204 ),
 
17
    ( 255, 153, 204 ), ( 255, 102, 204 ), ( 255,  51, 204 ), ( 255,   0, 204 ),
 
18
    ( 255, 255, 153 ), ( 255, 204, 153 ), ( 255, 153, 153 ), ( 255, 102, 153 ),
 
19
    ( 255,  51, 153 ), ( 255,   0, 153 ), ( 204, 255, 255 ), ( 204, 204, 255 ),
 
20
    ( 204, 153, 255 ), ( 204, 102, 255 ), ( 204,  51, 255 ), ( 204,   0, 255 ),
 
21
    ( 204, 255, 204 ), ( 204, 204, 204 ), ( 204, 153, 204 ), ( 204, 102, 204 ),
 
22
    ( 204,  51, 204 ), ( 204,   0, 204 ), ( 204, 255, 153 ), ( 204, 204, 153 ),
 
23
    ( 204, 153, 153 ), ( 204, 102, 153 ), ( 204,  51, 153 ), ( 204,   0, 153 ),
 
24
    ( 153, 255, 255 ), ( 153, 204, 255 ), ( 153, 153, 255 ), ( 153, 102, 255 ),
 
25
    ( 153,  51, 255 ), ( 153,   0, 255 ), ( 153, 255, 204 ), ( 153, 204, 204 ),
 
26
    ( 153, 153, 204 ), ( 153, 102, 204 ), ( 153,  51, 204 ), ( 153,   0, 204 ),
 
27
    ( 153, 255, 153 ), ( 153, 204, 153 ), ( 153, 153, 153 ), ( 153, 102, 153 ),
 
28
    ( 153,  51, 153 ), ( 153,   0, 153 ), ( 102, 255, 255 ), ( 102, 204, 255 ),
 
29
    ( 102, 153, 255 ), ( 102, 102, 255 ), ( 102,  51, 255 ), ( 102,   0, 255 ),
 
30
    ( 102, 255, 204 ), ( 102, 204, 204 ), ( 102, 153, 204 ), ( 102, 102, 204 ),
 
31
    ( 102,  51, 204 ), ( 102,   0, 204 ), ( 102, 255, 153 ), ( 102, 204, 153 ),
 
32
    ( 102, 153, 153 ), ( 102, 102, 153 ), ( 102,  51, 153 ), ( 102,   0, 153 ),
 
33
    (  51, 255, 255 ), (  51, 204, 255 ), (  51, 153, 255 ), (  51, 102, 255 ),
 
34
    (  51,  51, 255 ), (  51,   0, 255 ), (  51, 255, 204 ), (  51, 204, 204 ),
 
35
    (  51, 153, 204 ), (  51, 102, 204 ), (  51,  51, 204 ), (  51,   0, 204 ),
 
36
    (  51, 255, 153 ), (  51, 204, 153 ), (  51, 153, 153 ), (  51, 102, 153 ),
 
37
    (  51,  51, 153 ), (  51,   0, 153 ), (   0, 255, 255 ), (   0, 204, 255 ),
 
38
    (   0, 153, 255 ), (   0, 102, 255 ), (   0,  51, 255 ), (   0,   0, 255 ),
 
39
    (   0, 255, 204 ), (   0, 204, 204 ), (   0, 153, 204 ), (   0, 102, 204 ),
 
40
    (   0,  51, 204 ), (   0,   0, 204 ), (   0, 255, 153 ), (   0, 204, 153 ),
 
41
    (   0, 153, 153 ), (   0, 102, 153 ), (   0,  51, 153 ), (   0,   0, 153 ),
 
42
    ( 255, 255, 102 ), ( 255, 204, 102 ), ( 255, 153, 102 ), ( 255, 102, 102 ),
 
43
    ( 255,  51, 102 ), ( 255,   0, 102 ), ( 255, 255,  51 ), ( 255, 204,  51 ),
 
44
    ( 255, 153,  51 ), ( 255, 102,  51 ), ( 255,  51,  51 ), ( 255,   0,  51 ),
 
45
    ( 255, 255,   0 ), ( 255, 204,   0 ), ( 255, 153,   0 ), ( 255, 102,   0 ),
 
46
    ( 255,  51,   0 ), ( 255,   0,   0 ), ( 204, 255, 102 ), ( 204, 204, 102 ),
 
47
    ( 204, 153, 102 ), ( 204, 102, 102 ), ( 204,  51, 102 ), ( 204,   0, 102 ),
 
48
    ( 204, 255,  51 ), ( 204, 204,  51 ), ( 204, 153,  51 ), ( 204, 102,  51 ),
 
49
    ( 204,  51,  51 ), ( 204,   0,  51 ), ( 204, 255,   0 ), ( 204, 204,   0 ),
 
50
    ( 204, 153,   0 ), ( 204, 102,   0 ), ( 204,  51,   0 ), ( 204,   0,   0 ),
 
51
    ( 153, 255, 102 ), ( 153, 204, 102 ), ( 153, 153, 102 ), ( 153, 102, 102 ),
 
52
    ( 153,  51, 102 ), ( 153,   0, 102 ), ( 153, 255,  51 ), ( 153, 204,  51 ),
 
53
    ( 153, 153,  51 ), ( 153, 102,  51 ), ( 153,  51,  51 ), ( 153,   0,  51 ),
 
54
    ( 153, 255,   0 ), ( 153, 204,   0 ), ( 153, 153,   0 ), ( 153, 102,   0 ),
 
55
    ( 153,  51,   0 ), ( 153,   0,   0 ), ( 102, 255, 102 ), ( 102, 204, 102 ),
 
56
    ( 102, 153, 102 ), ( 102, 102, 102 ), ( 102,  51, 102 ), ( 102,   0, 102 ),
 
57
    ( 102, 255,  51 ), ( 102, 204,  51 ), ( 102, 153,  51 ), ( 102, 102,  51 ),
 
58
    ( 102,  51,  51 ), ( 102,   0,  51 ), ( 102, 255,   0 ), ( 102, 204,   0 ),
 
59
    ( 102, 153,   0 ), ( 102, 102,   0 ), ( 102,  51,   0 ), ( 102,   0,   0 ),
 
60
    (  51, 255, 102 ), (  51, 204, 102 ), (  51, 153, 102 ), (  51, 102, 102 ),
 
61
    (  51,  51, 102 ), (  51,   0, 102 ), (  51, 255,  51 ), (  51, 204,  51 ),
 
62
    (  51, 153,  51 ), (  51, 102,  51 ), (  51,  51,  51 ), (  51,   0,  51 ),
 
63
    (  51, 255,   0 ), (  51, 204,   0 ), (  51, 153,   0 ), (  51, 102,   0 ),
 
64
    (  51,  51,   0 ), (  51,   0,   0 ), (   0, 255, 102 ), (   0, 204, 102 ),
 
65
    (   0, 153, 102 ), (   0, 102, 102 ), (   0,  51, 102 ), (   0,   0, 102 ),
 
66
    (   0, 255,  51 ), (   0, 204,  51 ), (   0, 153,  51 ), (   0, 102,  51 ),
 
67
    (   0,  51,  51 ), (   0,   0,  51 ), (   0, 255,   0 ), (   0, 204,   0 ),
 
68
    (   0, 153,   0 ), (   0, 102,   0 ), (   0,  51,   0 ), (  17,  17,  17 ),
 
69
    (  34,  34,  34 ), (  68,  68,  68 ), (  85,  85,  85 ), ( 119, 119, 119 ),
 
70
    ( 136, 136, 136 ), ( 170, 170, 170 ), ( 187, 187, 187 ), ( 221, 221, 221 ),
 
71
    ( 238, 238, 238 ), ( 192, 192, 192 ), ( 128,   0,   0 ), ( 128,   0, 128 ),
 
72
    (   0, 128,   0 ), (   0, 128, 128 ), (   0,   0,   0 ), (   0,   0,   0 ),
 
73
    (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ),
 
74
    (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ),
 
75
    (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ),
 
76
    (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ),
 
77
    (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ),
 
78
    (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ), (   0,   0,   0 ))
 
79
 
 
80
# so build a prototype image to be used for palette resampling
 
81
def build_prototype_image():
 
82
    image = Image.new("L", (1,len(_Palm8BitColormapValues),))
 
83
    image.putdata(range(len(_Palm8BitColormapValues)))
 
84
    palettedata = ()
 
85
    for i in range(len(_Palm8BitColormapValues)):
 
86
        palettedata = palettedata + _Palm8BitColormapValues[i]
 
87
    for i in range(256 - len(_Palm8BitColormapValues)):
 
88
        palettedata = palettedata + (0, 0, 0)
 
89
    image.putpalette(palettedata)
 
90
    return image
 
91
 
 
92
Palm8BitColormapImage = build_prototype_image()
 
93
 
 
94
# OK, we now have in Palm8BitColormapImage, a "P"-mode image with the right palette
 
95
#
 
96
# --------------------------------------------------------------------
 
97
 
 
98
_FLAGS = {
 
99
    "custom-colormap": 0x4000,
 
100
    "is-compressed":   0x8000,
 
101
    "has-transparent": 0x2000,
 
102
    }
 
103
 
 
104
_COMPRESSION_TYPES = {
 
105
    "none":     0xFF,
 
106
    "rle":      0x01,
 
107
    "scanline": 0x00,
 
108
    }
 
109
 
 
110
def o16b(i):
 
111
    return chr(i>>8&255) + chr(i&255)
 
112
 
 
113
#
 
114
# --------------------------------------------------------------------
 
115
 
 
116
##
 
117
# (Internal) Image save plugin for the Palm format.
 
118
 
 
119
def _save(im, fp, filename, check=0):
 
120
 
 
121
    if im.mode == "P":
 
122
 
 
123
        # we assume this is a color Palm image with the standard colormap,
 
124
        # unless the "info" dict has a "custom-colormap" field
 
125
 
 
126
        rawmode = "P"
 
127
        bpp = 8
 
128
        version = 1
 
129
 
 
130
    elif im.mode == "L" and im.encoderinfo.has_key("bpp") and im.encoderinfo["bpp"] in (1, 2, 4):
 
131
 
 
132
        # this is 8-bit grayscale, so we shift it to get the high-order bits, and invert it because
 
133
        # Palm does greyscale from white (0) to black (1)
 
134
        bpp = im.encoderinfo["bpp"]
 
135
        im = im.point(lambda x, shift=8-bpp, maxval=(1 << bpp)-1: maxval - (x >> shift))
 
136
        # we ignore the palette here
 
137
        im.mode = "P"
 
138
        rawmode = "P;" + str(bpp)
 
139
        version = 1
 
140
 
 
141
    elif im.mode == "L" and im.info.has_key("bpp") and im.info["bpp"] in (1, 2, 4):
 
142
 
 
143
        # here we assume that even though the inherent mode is 8-bit grayscale, only
 
144
        # the lower bpp bits are significant.  We invert them to match the Palm.
 
145
        bpp = im.info["bpp"]
 
146
        im = im.point(lambda x, maxval=(1 << bpp)-1: maxval - (x & maxval))
 
147
        # we ignore the palette here
 
148
        im.mode = "P"
 
149
        rawmode = "P;" + str(bpp)
 
150
        version = 1
 
151
 
 
152
    elif im.mode == "1":
 
153
 
 
154
        # monochrome -- write it inverted, as is the Palm standard
 
155
        rawmode = "1;I"
 
156
        bpp = 1
 
157
        version = 0
 
158
 
 
159
    else:
 
160
 
 
161
        raise IOError, "cannot write mode %s as Palm" % im.mode
 
162
 
 
163
    if check:
 
164
        return check
 
165
 
 
166
    #
 
167
    # make sure image data is available
 
168
    im.load()
 
169
 
 
170
    # write header
 
171
 
 
172
    cols = im.size[0]
 
173
    rows = im.size[1]
 
174
 
 
175
    rowbytes = ((cols + (16/bpp - 1)) / (16 / bpp)) * 2;
 
176
    transparent_index = 0
 
177
    compression_type = _COMPRESSION_TYPES["none"]
 
178
 
 
179
    flags = 0;
 
180
    if im.mode == "P" and im.info.has_key("custom-colormap"):
 
181
        flags = flags & _FLAGS["custom-colormap"]
 
182
        colormapsize = 4 * 256 + 2;
 
183
        colormapmode = im.palette.mode
 
184
        colormap = im.getdata().getpalette()
 
185
    else:
 
186
        colormapsize = 0
 
187
 
 
188
    if im.info.has_key("offset"):
 
189
        offset = (rowbytes * rows + 16 + 3 + colormapsize) / 4;
 
190
    else:
 
191
        offset = 0
 
192
 
 
193
    fp.write(o16b(cols) + o16b(rows) + o16b(rowbytes) + o16b(flags))
 
194
    fp.write(chr(bpp))
 
195
    fp.write(chr(version))
 
196
    fp.write(o16b(offset))
 
197
    fp.write(chr(transparent_index))
 
198
    fp.write(chr(compression_type))
 
199
    fp.write(o16b(0))   # reserved by Palm
 
200
 
 
201
    # now write colormap if necessary
 
202
 
 
203
    if colormapsize > 0:
 
204
        fp.write(o16b(256))
 
205
        for i in range(256):
 
206
            fp.write(chr(i))
 
207
            if colormapmode == 'RGB':
 
208
                fp.write(chr(colormap[3 * i]) + chr(colormap[3 * i + 1]) + chr(colormap[3 * i + 2]))
 
209
            elif colormapmode == 'RGBA':
 
210
                fp.write(chr(colormap[4 * i]) + chr(colormap[4 * i + 1]) + chr(colormap[4 * i + 2]))
 
211
 
 
212
    # now convert data to raw form
 
213
    ImageFile._save(im, fp, [("raw", (0,0)+im.size, 0, (rawmode, rowbytes, 1))])
 
214
 
 
215
    fp.flush()
 
216
 
 
217
 
 
218
#
 
219
# --------------------------------------------------------------------
 
220
 
 
221
Image.register_save("Palm", _save)
 
222
 
 
223
Image.register_extension("Palm", ".palm")
 
224
 
 
225
Image.register_mime("Palm", "image/palm")