-
Notifications
You must be signed in to change notification settings - Fork 1
/
CHANGES
1767 lines (1203 loc) · 62.3 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
-*- coding: utf-8 -*-
The Python Imaging Library
$Id$
ACKNOWLEDGEMENTS: PIL wouldn't be what it is without the help of:
David Ascher, Phil Austin, Douglas Bagnall, Larry Bates, Anthony
Baxter, William Baxter, Denis Benoit, Jan Blom, Duncan Booth, Alexey
Borzenkov, Jeff Breidenbach, Roger Burnham, Zac Burns, Gene Cash,
Kevin Cazabon, Fred Clare, Greg Coats, Chris Cogdon, Greg Couch, Bill
Crutchfield, Abel Deuring, Tim Docker, Fred Drake, Graham Dumpleton,
Matthew Ellis, Eric Etheridge, Daniel Fetchinson, Robin Friedrich,
Pier Paolo Glave, Federico Di Gregorio, Markus Gritsch, Daniel
Haertle, Greg Hamilton, Mark Hammond, Bernhard Herzog, Rob Hooft, Bob
Ippolito, Jack Jansen, Bill Janssen, Edward Jones, Richard Jones,
Håkan Karlsson, Robert Kern, David Kirtley, Bob Klimek, Matthias
Klose, Andrew Kuchling, Magnus Källström, Victor Lacina, Ben Last,
Hamish Lawson, Cesare Leonardi, Andrew MacIntyre, Jan Matejek, Naveen
Michaud-Agrawal, Gordon McMillan, Skip Montanaro, Fredrik Nehr,
Russell Nelson, Luciano Nocera, Travis Oliphant, Piet van Oostrum,
Richard Oudkerk, Paul Pharr, Andres Polit, Conrado Porto Lopes Gouvêa,
Eric Raymond, Victor Reijs, Bertil Reinhammar, Nicholas Riley, Don
Rozenberg, Toby Sargeant, Barry Scott, Les Schaffer, Joel Shprentz,
Klamer Shutte, Gene Skonicki, Niki Spahiev, D. Alan Stewart, Perry
Stoll, Paul Svensson, Ulrik Svensson, Miki Tebeka, Michael van
Tellingen, Ivan Tkatchev, Dan Torop, Adam Twardoch, Rune Uhlin, Dmitry
Vasiliev, Sasha Voynow, Charles Waldman, Collin Winter, Dan Wolfe,
Ka-Ping Yee, and many others (if your name should be on this list, let
me know.)
*** Changes from release 1.1.6 to 1.1.7 ***
This section may not be fully complete. For changes since this file
was last updated, see the repository revision history:
http://bitbucket.org/effbot/pil-2009-raclette/changesets/
(1.1.7 final)
+ Set GIF loop info property to the number of iterations if a NETSCAPE
loop extension is present, instead of always setting it to 1 (from
Valentino Volonghi).
(1.1.7c1 released)
+ Improved PNG compression (from Alexey Borzenkov).
+ Read interlaced PNG files (from Conrado Porto Lopes Gouvêa)
+ Added various TGA improvements from Alexey Borzenkov, including
support for specifying image orientation.
+ Bumped block threshold to 16 megabytes, made size estimation a bit
more accurate. This speeds up allocation of large images.
+ Fixed rounding error in ImagingDrawWideLine.
"gormish" writes: ImagingDrawWideLine() in Draw.c has a bug in every
version I've seen, which leads to different width lines depending on
the order of the points in the line. This is especially bad at some
angles where a 'width=2' line can completely disappear.
+ Added support for RGBA mode to the SGI module (based on code by
Karsten Hiddemann).
+ Handle repeated IPTC tags (adapted from a patch by Eric Bruning).
Eric writes: According to the specification, some IPTC tags can be
repeated, e.g., tag 2:25 (keywords). PIL 1.1.6 only retained the last
instance of that tag. Below is a patch to store all tags. If there are
multiple tag instances, they are stored in a (python) list. Single tag
instances remain as strings.
+ Fixed potential crash in ImageFilter for small target images
(reported by Zac Burns and Daniel Fetchinson).
+ Use BMP instead of JPEG as temporary show format on Mac OS X.
+ Fixed putpixel/new for I;16 with colors > 255.
+ Added integer power support to ImagingMath.
+ Added limited support for I;16L mode (explicit little endian).
+ Moved WMF support into Image.core; enable WMF rendering by default
if renderer is available.
+ Mark the ARG plugin as obsolete.
+ Added version query mechanism to ImageCms and ImageFont, for
debugging.
+ Added (experimental) ImageCms function for fetching the ICC profile
for the current display (currently Windows only).
Added HWND/HDC support to ImageCms.get_display_profile().
+ Added WMF renderer (Windows only).
+ Added ImagePointHandler and ImageTransformHandler mixins; made
ImageCmsTransform work with im.point.
+ Fixed potential endless loop in the XVThumbnail reader (from Nikolai
Ugelvik).
+ Added Kevin Cazabon's pyCMS package.
The C code has been moved to _imagingcms.c, the Python interface
module is installed as PIL.ImageCMS.
Added support for in-memory ICC profiles.
Unified buildTransform and buildTransformFromOpenProfiles.
The profile can now be either a filename, a profile object, or a
file-like object containing an in-memory profile.
Additional fixes from Florian Böch:
Very nice - it just needs LCMS flags support so we can use black
point compensation and softproofing :) See attached patches. They
also fix a naming issue which could cause confusion - display
profile (ImageCms wording) actually means proof profile (lcms
wording), so I changed variable names and docstrings where
applicable. Patches are tested under Python 2.6.
+ Improved support for layer names in PSD files (from Sylvain Baubeau)
Sylvain writes: I needed to be able to retrieve the names of the
layers in a PSD files. But PsdImagePlugin.py didn't do the job so I
wrote this very small patch.
+ Improved RGBA support for ImageTk for 8.4 and newer (from Con
Radchenko).
This replaces the slow run-length based encoding model with true
compositing at the Tk level.
+ Added support for 16- and 32-bit images to McIdas loader.
Based on file samples and stand-alone reader code provided by Craig
Swank.
+ Added ImagePalette support to putpalette.
+ Fixed problem with incremental parsing of PNG files.
+ Make selftest.py report non-zero status on failure (from Mark
Sienkiewicz)
+ Add big endian save support and multipage infrastructure to the TIFF
writer (from Sebastian Haase).
+ Handle files with GPS IFD but no basic EXIF IFD (reported by Kurt
Schwehr).
+ Added zTXT support (from Andrew Kuchling via Lowell Alleman).
+ Fixed potential infinite loop bug in ImageFont (from Guilherme Polo).
+ Added sample ICC profiles (from Kevin Cazabon)
+ Fixed array interface for I, F, and RGBA/RGBX images.
+ Added Chroma subsampling support for JPEG (from Justin Huff).
Justin writes: Attached is a patch (against PIL 1.1.6) to provide
control over the chroma subsampling done by the JPEG encoder. This
is often useful for reducing compression artifacts around edges of
clipart and text.
+ Added USM/Gaussian Blur code from Kevin Cazabon.
+ Fixed bug w. uninitialized image data when cropping outside the
source image.
+ Use ImageShow to implement the Image.show method.
Most notably, this picks the 'display' utility when available. It
also allows application code to register new display utilities via
the ImageShow registry.
+ Release the GIL in the PNG compressor (from Michael van Tellingen).
+ Revised JPEG CMYK handling.
Always assume Adobe behaviour, both when reading and writing (based on
a patch by Kevin Cazabon, and test data by Tim V. and Charlie Clark, and
additional debugging by Michael van Tellingen).
+ Support for preserving ICC profiles (by Florian Böch via Tim Hatch).
Florian writes:
It's a beta, so still needs some testing, but should allow you to:
- retain embedded ICC profiles when saving from/to JPEG, PNG, TIFF.
Existing code doesn't need to be changed.
- access embedded profiles in JPEG, PNG, PSD, TIFF.
It also includes patches for TIFF to retain IPTC, Photoshop and XMP
metadata when saving as TIFF again, read/write TIFF resolution
information correctly, and to correct inverted CMYK JPEG files.
+ Fixed potential memory leak in median cut quantizer (from Evgeny Salmin).
+ Fixed OverflowError when reading upside-down BMP images.
+ Added resolution save option for PDF files.
Andreas Kostyrka writes: I've included a patched PdfImagePlugin.py
based on 1.1.6 as included in Ubuntu, that supports a "resolution"
save option. Not great, but it makes the PDF saving more useful by
allowing PDFs that are not exactly 72dpi.
+ Look for Tcl/Tk include files in version-specific include directory
(from Encolpe Degoute).
+ Fixed grayscale rounding error in ImageColor.getcolor (from Tim
Hatch).
+ Fixed calculation of mean value in ImageEnhance.Contrast (reported
by "roop" and Scott David Daniels).
+ Fixed truetype positioning when first character has a negative left
bearing (from Ned Batchelder):
Ned writes: In PIL 1.1.6, ImageDraw.text will position the string
incorrectly if the first character has a negative left bearing. To
see the problem, show a string like "///" in an italic font. The
first slash will be clipped at the left, and the string will be
mis-positioned.
+ Fixed resolution unit bug in tiff reader/writer (based on code by
Florian Höch, Gary Bloom, and others).
+ Added simple transparency support for RGB images (reported by
Sebastian Spaeth).
+ Added support for Unicode filenames in ImageFont.truetype (from Donn
Ingle).
+ Fixed potential crash in ImageFont.getname method (from Donn Ingle).
+ Fixed encoding issue in PIL/WalImageFile (from Santiago M. Mola).
*** Changes from release 1.1.5 to 1.1.6 ***
(1.1.6 released)
+ Fixed some 64-bit compatibility warnings for Python 2.5.
+ Added threading support for the Sane driver (from Abel Deuring).
(1.1.6b2 released)
+ Added experimental "floodfill" function to the ImageDraw module
(based on code by Eric Raymond).
+ The default arguments for "frombuffer" doesn't match "fromstring"
and the documentation; this is a bug, and will most likely be fixed
in a future version. In this release, PIL prints a warning message
instead. To silence the warning, change any calls of the form
"frombuffer(mode, size, data)" to
frombuffer(mode, size, data, "raw", mode, 0, 1)
+ Added "fromarray" function, which takes an object implementing the
NumPy array interface and creates a PIL Image from it. (from Travis
Oliphant).
+ Added NumPy array interface support (__array_interface__) to the
Image class (based on code by Travis Oliphant).
This allows you to easily convert between PIL image memories and
NumPy arrays:
import numpy, Image
im = Image.open('lena.jpg')
a = numpy.asarray(im) # a is readonly
im = Image.fromarray(a)
+ Fixed CMYK polarity for JPEG images, by treating all images as
"Adobe CMYK" images. (thanks to Cesare Leonardi and Kevin Cazabon
for samples, debugging, and patches).
(1.1.6b1 released)
+ Added 'expand' option to the Image 'rotate' method. If true, the
output image is made large enough to hold the entire rotated image.
+ Changed the ImageDraw 'line' method to always draw the last pixel in
a polyline, independent of line angle.
+ Fixed bearing calculation and clipping in the ImageFont truetype
renderer; this could lead to clipped text, or crashes in the low-
level _imagingft module. (based on input from Adam Twardoch and
others).
+ Added ImageQt wrapper module, for converting PIL Image objects to
QImage objects in an efficient way.
+ Fixed 'getmodebands' to return the number of bands also for "PA"
and "LA" modes. Added 'getmodebandnames' helper that return the
band names.
(1.1.6a2 released)
+ Added float/double support to the TIFF loader (from Russell
Nelson).
+ Fixed broken use of realloc() in path.c (from Jan Matejek)
+ Added save support for Spider images (from William Baxter).
+ Fixed broken 'paste' and 'resize' operations in pildriver
(from Bill Janssen).
+ Added support for duplex scanning to the Sane interface (Abel
Deuring).
(1.1.6a1 released)
+ Fixed a memory leak in "convert(mode)", when converting from
L to P.
+ Added pixel access object. The "load" method now returns a
access object that can be used to directly get and set pixel
values, using ordinary [x, y] notation:
pixel = im.load()
v = pixel[x, y]
pixel[x, y] = v
If you're accessing more than a few pixels, this is a lot
faster than using getpixel/putpixel.
+ Fixed building on Cygwin (from Miki Tebeka).
+ Fixed "point(callable)" on unloaded images (reported by Håkan
Karlsson).
+ Fixed size bug in ImageWin.ImageWindow constructor (from Victor
Reijs)
+ Fixed ImageMath float() and int() operations for Python 2.4
(reported by Don Rozenberg).
+ Fixed "RuntimeError: encoder error -8 in tostring" problem for
wide "RGB", "I", and "F" images.
+ Fixed line width calculation.
(1.1.6a0 released)
+ Fixed byte order issue in Image.paste(ink) (from Ka-Ping Yee).
+ Fixed off-by-0.5 errors in the ANTIALIAS code (based on input
from Douglas Bagnall).
+ Added buffer interface support to the Path constructor. If
a buffer is provided, it is assumed to contain a flat array
of float coordinates (e.g. array.array('f', seq)).
+ Added new ImageMath module.
+ Fixed ImageOps.equalize when used with a small number of distinct
values (reported by David Kirtley).
+ Fixed potential integer division in PSDraw.image (from Eric Etheridge).
*** Changes from release 1.1 to 1.1.5 ***
(1.1.5c2 and 1.1.5 final released)
+ Added experimental PERSPECTIVE transform method (from Jeff Breiden-
bach).
(1.1.5c1 released)
+ Make sure "thumbnail" never generates zero-wide or zero-high images
(reported by Gene Skonicki)
+ Fixed a "getcolors" bug that could result in a zero count for some
colors (reported by Richard Oudkerk).
+ Changed default "convert" palette to avoid "rounding errors" when
round-tripping white source pixels (reported by Henryk Gerlach and
Jeff Epler).
(1.1.5b3 released)
+ Don't crash in "quantize" method if the number of colors requested
is larger than 256. This release raises a ValueError exception;
future versions may return a mode "RGB" image instead (reported
by Richard Oudkerk).
+ Added WBMP read/write support (based on code by Duncan Booth).
(1.1.5b2 released)
+ Added DPI read/write support to the PNG codec. The decoder sets
the info["dpi"] attribute for PNG files with appropriate resolution
settings. The encoder uses the "dpi" option (based on code by Niki
Spahiev).
+ Added limited support for "point" mappings from mode "I" to mode "L".
Only 16-bit values are supported (other values are clipped), the lookup
table must contain exactly 65536 entries, and the mode argument must be
set to "L".
+ Added support for Mac OS X icns files (based on code by Bob Ippolito).
+ Added "ModeFilter" support to the ImageFilter module.
+ Added support for Spider images (from William Baxter). See the
comments in PIL/SpiderImagePlugin.py for more information on this
format.
(1.1.5b1 released)
+ Added new Sane release (from Ralph Heinkel). See the Sane/README
and Sane/CHANGES files for more information.
+ Added experimental PngInfo chunk container to the PngImageFile
module. This can be used to add arbitrary chunks to a PNG file.
Create a PngInfo instance, use "add" or "add_text" to add chunks,
and pass the instance as the "pnginfo" option when saving the
file.
+ Added "getpalette" method. This returns the palette as a list,
or None if the image has no palette. To modify the palette, use
"getpalette" to fetch the current palette, modify the list, and
put it back using "putpalette".
+ Added optional flattening to the ImagePath "tolist" method.
tolist() or tolist(0) returns a list of 2-tuples, as before.
tolist(1) returns a flattened list instead.
(1.1.5a5 released)
+ Fixed BILINEAR/BICUBIC/ANTIALIAS filtering for mode "LA".
+ Added "getcolors()" method. This is similar to the existing histo-
gram method, but looks at color values instead of individual layers,
and returns an unsorted list of (count, color) tuples.
By default, the method returns None if finds more than 256 colors.
If you need to look for more colors, you can pass in a limit (this
is used to allocate internal tables, so you probably don't want to
pass in too large values).
+ Build improvements: Fixed building under AIX, improved detection of
FreeType2 and Mac OS X framework libraries, and more. Many thanks
to everyone who helped test the new "setup.py" script!
(1.1.5a4 released)
+ The "save" method now looks for a file format driver before
creating the file.
+ Don't use antialiased truetype fonts when drawing in mode "P", "I",
and "F" images.
+ Rewrote the "setup.py" file. The new version scans for available
support libraries, and configures both the libImaging core library
and the bindings in one step.
To use specific versions of the libraries, edit the ROOT variables
in the setup.py file.
+ Removed threaded "show" viewer; use the old "show" implementation
instead (Windows).
+ Added deprecation warnings to Image.offset, ImageDraw.setink, and
ImageDraw.setfill.
+ Added width option to ImageDraw.line(). The current implementation
works best for straight lines; it does not support line joins, so
polylines won't look good.
+ ImageDraw.Draw is now a factory function instead of a class. If
you need to create custom draw classes, inherit from the ImageDraw
class. All other code should use the factory function.
+ Fixed loading of certain PCX files (problem reported by Greg
Hamilton, who also provided samples).
+ Changed _imagingft.c to require FreeType 2.1 or newer. The
module can still be built with earlier versions; see comments
in _imagingft.c for details.
(1.1.5a3 released)
+ Added 'getim' method, which returns a PyCObject wrapping an
Imaging pointer. The description string is set to IMAGING_MAGIC.
See Imaging.h for pointer and string declarations.
+ Fixed reading of TIFF JPEG images (problem reported by Ulrik
Svensson).
+ Made ImageColor work under Python 1.5.2
+ Fixed division by zero "equalize" on very small images (from
Douglas Bagnall).
(1.1.5a2 released)
+ The "paste" method now supports the alternative "paste(im, mask)"
syntax (in this case, the box defaults to im's bounding box).
+ The "ImageFile.Parser" class now works also for PNG files with
more than one IDAT block.
+ Added DPI read/write to the TIFF codec, and fixed writing of
rational values. The decoder sets the info["dpi"] attribute
for TIFF files with appropriate resolution settings. The
encoder uses the "dpi" option.
+ Disable interlacing for small (or narrow) GIF images, to
work around what appears to be a hard-to-find bug in PIL's
GIF encoder.
+ Fixed writing of mode "P" PDF images. Made mode "1" PDF
images smaller.
+ Made the XBM reader a bit more robust; the file may now start
with a few whitespace characters.
+ Added support for enhanced metafiles to the WMF driver. The
separate PILWMF kit lets you render both placeable WMF files
and EMF files as raster images. See
http://effbot.org/downloads#pilwmf
(1.1.5a1 released)
+ Replaced broken WMF driver with a WMF stub plugin (see below).
+ Fixed writing of mode "1", "L", and "CMYK" PDF images (based on
input from Nicholas Riley and others).
+ Fixed adaptive palette conversion for zero-width or zero-height
images (from Chris Cogdon)
+ Fixed reading of PNG images from QuickTime 6 (from Paul Pharr)
+ Added support for StubImageFile plugins, including stub plugins
for BUFR, FITS, GRIB, and HDF5 files. A stub plugin can identify
a given file format, but relies on application code to open and
save files in that format.
+ Added optional "encoding" argument to the ImageFont.truetype
factory. This argument can be used to specify non-Unicode character
maps for fonts that support that. For example, to draw text using
the Microsoft Symbol font, use:
font = ImageFont.truetype("symbol.ttf", 16, encoding="symb")
draw.text((0, 0), unichr(0xF000 + 0xAA))
(note that the symbol font uses characters in the 0xF000-0xF0FF
range)
Common encodings are "unic" (Unicode), "symb" (Microsoft Symbol),
"ADOB" (Adobe Standard), "ADBE" (Adobe Expert), and "armn" (Apple
Roman). See the FreeType documentation for more information.
+ Made "putalpha" a bit more robust; you can now attach an alpha
layer to a plain "L" or "RGB" image, and you can also specify
constant alphas instead of alpha layers (using integers or colour
names).
+ Added experimental "LA" mode support.
An "LA" image is an "L" image with an attached transparency layer.
Note that support for "LA" is not complete; some operations may
fail or produce unexpected results.
+ Added "RankFilter", "MinFilter", "MedianFilter", and "MaxFilter"
classes to the ImageFilter module.
+ Improved support for applications using multiple threads; PIL
now releases the global interpreter lock for many CPU-intensive
operations (based on work by Kevin Cazabon).
+ Ignore Unicode characters in the PCF loader (from Andres Polit)
+ Fixed typo in OleFileIO.loadfat, which could affect loading of
FlashPix and Image Composer images (Daniel Haertle)
+ Fixed building on platforms that have Freetype but don't have
Tcl/Tk (Jack Jansen, Luciano Nocera, Piet van Oostrum and others)
+ Added EXIF GPSInfo read support for JPEG files. To extract
GPSInfo information, open the file, extract the exif dictionary,
and check for the key 0x8825 (GPSInfo). If present, it contains
a dictionary mapping GPS keys to GPS values. For a list of keys,
see the EXIF specification.
The "ExifTags" module contains a GPSTAGS dictionary mapping GPS
tags to tag names.
+ Added DPI read support to the PCX and DCX codecs (info["dpi"]).
+ The "show" methods now uses a built-in image viewer on Windows.
This viewer creates an instance of the ImageWindow class (see
below) and keeps it running in a separate thread. NOTE: This
was disabled in 1.1.5a4.
+ Added experimental "Window" and "ImageWindow" classes to the
ImageWin module. These classes allow you to create a WCK-style
toplevel window, and use it to display raster data.
+ Fixed some Python 1.5.2 issues (to build under 1.5.2, use the
Makefile.pre.in/Setup.in approach)
+ Added support for the TIFF FillOrder tag. PIL can read mode "1",
"L", "P" and "RGB" images with non-standard FillOrder (based on
input from Jeff Breidenbach).
(1.1.4 final released)
+ Fixed ImageTk build problem on Unix.
(1.1.4b2 released)
+ Improved building on Mac OS X (from Jack Jansen).
+ Improved building on Windows with MinGW (from Klamer Shutte).
+ If no font is specified, ImageDraw now uses the embedded default
font. Use the "load" or "truetype" methods to load a real font.
+ Added embedded default font to the ImageFont module (currently
an 8-pixel Courier font, taken from the X window distribution).
(1.1.4b1 released)
+ Added experimental EXIF support for JPEG files. To extract EXIF
information from a JPEG file, open the file as usual, and call the
"_getexif" method. If successful, this method returns a dictionary
mapping EXIF TIFF tags to values. If the file does not contain EXIF
data, the "_getexif" method returns None.
The "ExifTags" module contains a dictionary mapping tags to tag
names.
This interface will most likely change in future versions.
+ Fixed a bug when using the "transparency" option with the GIF
writer.
+ Added limited support for "bitfield compression" in BMP files
and DIB buffers, for 15-bit, 16-bit, and 32-bit images. This
also fixes a problem with ImageGrab module when copying screen-
dumps from the clipboard on 15/16/32-bit displays.
+ Added experimental WAL (Quake 2 textures) loader. To use this
loader, import WalImageFile and call the "open" method in that
module.
(1.1.4a4 released)
+ Added updated SANE driver (Andrew Kuchling, Abel Deuring)
+ Use Python's "mmap" module on non-Windows platforms to read some
uncompressed formats using memory mapping. Also added a "frombuffer"
function that allows you to access the contents of an existing string
or buffer object as if it were an image object.
+ Fixed a memory leak that could appear when processing mode "P"
images (from Pier Paolo Glave)
+ Ignore Unicode characters in the BDF loader (from Graham Dumpleton)
(1.1.4a3 released; windows only)
+ Added experimental RGBA-on-RGB drawing support. To use RGBA
colours on an RGB image, pass "RGBA" as the second string to
the ImageDraw.Draw constructor.
+ Added support for non-ASCII strings (Latin-1) and Unicode
to the truetype font renderer.
+ The ImageWin "Dib" object can now be constructed directly from
an image object.
+ The ImageWin module now allows you use window handles as well
as device contexts. To use a window handle, wrap the handle in
an ImageWin.HWND object, and pass in this object instead of the
device context.
(1.1.4a2 released)
+ Improved support for 16-bit unsigned integer images (mode "I;16").
This includes TIFF reader support, and support for "getextrema"
and "point" (from Klamer Shutte).
+ Made the BdfFontFile reader a bit more robust (from Kevin Cazabon
and Dmitry Vasiliev)
+ Changed TIFF writer to always write Compression tag, even when
using the default compression (from Greg Couch).
+ Added "show" support for Mac OS X (from Dan Wolfe).
+ Added clipboard support to the "ImageGrab" module (Windows only).
The "grabclipboard" function returns an Image object, a list of
filenames (not in 1.1.4), or None if neither was found.
(1.1.4a1 released)
+ Improved support for drawing RGB data in palette images. You can
now use RGB tuples or colour names (see below) when drawing in a
mode "P" image. The drawing layer automatically assigns color
indexes, as long as you don't use more than 256 unique colours.
+ Moved self test from MiniTest/test.py to ./selftest.py.
+ Added support for CSS3-style color strings to most places that
accept colour codes/tuples. This includes the "ImageDraw" module,
the Image "new" function, and the Image "paste" method.
Colour strings can use one of the following formats: "#f00",
"#ff0000", "rgb(255,0,0)", "rgb(100%,0%,0%)", "hsl(0, 100%, 50%)",
or "red" (most X11-style colour names are supported). See the
documentation for the "ImageColor" module for more information.
+ Fixed DCX decoder (based on input from Larry Bates)
+ Added "IptcImagePlugin.getiptcinfo" helper to extract IPTC/NAA
newsphoto properties from JPEG, TIFF, or IPTC files.
+ Support for TrueType/OpenType fonts has been added to
the standard distribution. You need the freetype 2.0
library.
+ Made the PCX reader a bit more robust when reading 2-bit
and 4-bit PCX images with odd image sizes.
+ Added "Kernel" class to the ImageFilter module. This class
allows you to filter images with user-defined 3x3 and 5x5
convolution kernels.
+ Added "putdata" support for mode "I", "F" and "RGB".
+ The GIF writer now supports the transparency option (from
Denis Benoit).
+ A HTML version of the module documentation is now shipped
with the source code distribution. You'll find the files in
the Doc subdirectory.
+ Added support for Palm pixmaps (from Bill Janssen). This
change was listed for 1.1.3, but the "PalmImagePlugin" driver
didn't make it into the distribution.
+ Improved decoder error messages.
(1.1.3 final released)
+ Made setup.py look for old versions of zlib. For some back-
ground, see: http://www.gzip.org/zlib/advisory-2002-03-11.txt
(1.1.3c2 released)
+ Added setup.py file (tested on Unix and Windows). You still
need to build libImaging/imaging.lib in the traditional way,
but the setup.py script takes care of the rest.
The old Setup.in/Makefile.pre.in build method is still
supported.
+ Fixed segmentation violation in ANTIALIAS filter (an internal
buffer wasn't properly allocated).
(1.1.3c1 released)
+ Added ANTIALIAS downsampling filter for high-quality "resize"
and "thumbnail" operations. Also added filter option to the
"thumbnail" operation; the default value is NEAREST, but this
will most likely change in future versions.
+ Fixed plugin loader to be more robust if the __file__
variable isn't set.
+ Added seek/tell support (for layers) to the PhotoShop
loader. Layer 0 is the main image.
+ Added new (but experimental) "ImageOps" module, which provides
shortcuts for commonly used operations on entire images.
+ Don't mess up when loading PNG images if the decoder leaves
data in the output buffer. This could cause internal errors
on some PNG images, with some versions of ZLIB. (Bug report
and patch provided by Bernhard Herzog.)
+ Don't mess up on Unicode filenames.
+ Don't mess up when drawing on big endian platforms.
+ Made the TIFF loader a bit more robust; it can now read some
more slightly broken TIFF files (based on input from Ted Wright,
Bob Klimek, and D. Alan Stewart)
+ Added OS/2 EMX build files (from Andrew MacIntyre)
+ Change "ImageFont" to reject image files if they don't have the
right mode. Older versions could leak memory for "P" images.
(Bug reported by Markus Gritsch).
+ Renamed some internal functions to avoid potential build
problem on Mac OS X.
+ Added DL_EXPORT where relevant (for Cygwin, based on input
from Robert Yodlowski)
+ (re)moved bogus __init__ call in BdfFontFile (bug spotted
by Fred Clare)
+ Added "ImageGrab" support (Windows only)
+ Added support for XBM hotspots (based on code contributed by
Bernhard Herzog).
+ Added write support for more TIFF tags, namely the Artist,
Copyright, DateTime, ResolutionUnit, Software, XResolution and
YResolution tags (from Greg Couch)
+ Added TransposedFont wrapper to ImageFont module
+ Added "optimize" flag to GIF encoder. If optimize is present
and non-zero, PIL will work harder to create a small file.
+ Raise "EOFError" (not IndexError) when reading beyond the
end of a TIFF sequence.
+ Support rewind ("seek(0)") for GIF and TIFF sequences.
+ Load grayscale GIF images as mode "L"
+ Added DPI read/write support to the JPEG codec. The decoder
sets the info["dpi"] attribute for JPEG files with JFIF dpi
settings. The encoder uses the "dpi" option:
im = Image.open("file.jpg")
dpi = im.info["dpi"] # raises KeyError if DPI not known
im.save("out.jpg", dpi=dpi)
Note that PIL doesn't always preserve the "info" attribute
for normal image operations.
(1.1.2c1 and 1.1.2 final released)
+ Adapted to Python 2.1. Among other things, all uses of the
"regex" module has been repleased with "re".
+ Fixed attribute error when reading large PNG files (this bug
was introduced in maintenance code released after the 1.1.1
release)
+ Ignore non-string objects in sys.path
+ Fixed Image.transform(EXTENT) for negative xoffsets
+ Fixed loading of image plugins if PIL is installed as a package.
(The plugin loader now always looks in the directory where the
Image.py module itself is found, even if that directory isn't on
the standard search path)
+ The Png plugin has been added to the list of preloaded standard
formats
+ Fixed bitmap/text drawing in fill mode.
+ Fixed "getextrema" to work also for multiband images.
+ Added transparency support for L and P images to the PNG codec.
+ Improved support for read-only images. The "load" method now
sets the "readonly" attribute for memory-mapped images. Operations
that modifies an image in place (such as "paste" and drawing operations)
creates an in-memory copy of the image, if necessary. (before this
change, any attempt to modify a memory-mapped image resulted in a
core dump...)
+ Added special cases for lists everywhere PIL expects a sequence.
This should speed up things like "putdata" and drawing operations.
+ The Image.offset method is deprecated. Use the ImageChops.offset
function instead.
+ Changed ImageChops operators to copy palette and info dictionary
from the first image argument.
(1.1.1 released)
+ Additional fixes for Python 1.6/2.0, including TIFF "save" bug.
+ Changed "init" to properly load plugins when PIL is used as a
package.
+ Fixed broken "show" method (on Unix)
*** Changes from release 1.0 to 1.1 ***
+ Adapted to Python 1.6 ("append" and other method changes)
+ Fixed Image.paste when pasting with solid colour and matte
layers ("L" or "RGBA" masks) (bug reported by Robert Kern)
+ To make it easier to distribute prebuilt versions of PIL,
the tkinit binding stuff has been moved to a separate
extension module, named "_imagingtk".
*** Changes from release 0.3b2 to 1.0 final ***
+ If there's no 16-bit integer (like on a Cray T3E), set
INT16 to the smallest integer available. Most of the
library works just fine anyway (from Bill Crutchfield)
+ Tweaks to make drawing work on big-endian platforms.
(1.0c2 released)
+ If PIL is built with the WITH_TKINTER flag, ImageTk can
automatically hook into a standard Tkinter build. You
no longer need to build your own Tkinter to use the
ImageTk module.
The old way still works, though. For more information,
see Tk/install.txt.
+ Some tweaks to ImageTk to support multiple Tk interpreters
(from Greg Couch).
+ ImageFont "load_path" now scans directory mentioned in .pth
files (from Richard Jones).
(1.0c1 released)
+ The TIFF plugin has been rewritten. The new plugin fully
supports all major PIL image modes (including F and I).
+ The ImageFile module now includes a Parser class, which can
be used to incrementally decode an image file (while down-
loading it from the net, for example). See the handbook for
details.
+ "show" now converts non-standard modes to "L" or "RGB" (as
appropriate), rather than writing weird things to disk for
"xv" to choke upon. (bug reported by Les Schaffer).
(1.0b2 released)
+ Major speedups for rotate, transform(EXTENT), and transform(AFFINE)
when using nearest neighbour resampling.
+ Modified ImageDraw to be compatible with the Arrow graphics
interface. See the handbook for details.
+ PIL now automatically loads file codecs when used as a package
(from The Dragon De Monsyne). Also included an __init__.py file
in the standard distribution.
+ The GIF encoder has been modified to produce much smaller files.
PIL now uses a run-length encoding method to encode GIF files.
On a random selection of GIF images grabbed from the web, this
version makes the images about twice as large as the original
LZW files, where the earlier version made them over 5 times
larger. YMMV, of course.
+ Added PCX write support (works with "1", "P", "L", and "RGB")
+ Added "bitmap" and "textsize" methods to ImageDraw.
+ Improved font rendering code. Fixed a bug or two, and moved
most of the time critical stuff to C.
+ Removed "bdf2pil.py". Use "pilfont.py" instead!
+ Improved 16-bit support (still experimental, though).
The following methods now support "I;16" and "I;16B" images:
"getpixel", "copy", "convert" (to and from mode "I"), "resize",
"rotate", and "transform" with nearest neighbour filters, and
"save" using the IM format. The "new" and "open" functions
also work as expected. On Windows, 16-bit files are memory
mapped.
NOTE: ALL other operations are still UNDEFINED on 16-bit images.
+ The "paste" method now supports constant sources.
Just pass a colour value (a number or a tuple, depending on
the target image mode) instead of the source image.