Upgrading pillow 3 to 4
Breaking3.4.2 → 4.3.0Breaking23Platform2Deprecated2New28Changed21Fixed44Other119
BreakingUpgrade verdict
23 breaking changes and 2 platform requirement changes.
In plain terms
- Removed redundant lines [radarhere].
- Removed debugging interface for Image.core.grabclipboard [radarhere].
- Remove palettes from non-palette modes in _new [wiredfool].
- Delete transparency info when convert'ing RGB/L to RGBA [olt].
Must act Top 5 of 27 that need code or config changes
What you must change
Breaking23
Removed redundant lines [radarhere].
Removed debugging interface for Image.core.grabclipboard [radarhere].
Remove palettes from non-palette modes in _new [wiredfool].
Delete transparency info when convert'ing RGB/L to RGBA [olt].
Remove unused im.copy2 and core.copy methods [homm].
Remove deprecated code [hugovk].
Remove unused function core image function new_array [hugovk].
Remove unnecessary calls to dict.keys [jdufresne].
Remove 'not yet implemented' methods from PIL 1.1.4 [hugovk].
Remove WITH_DEBUG compilation flag [wiredfool].
Removed winbuild checksum verification [radarhere].
Remove superfluous import of FixTk [cgohlke).
Remove unused imports [radarhere].
Removed use of spaces in TIFF kwargs names, deprecated in 2.7 [radarhere].
Removed deprecated ImageDraw setink, setfill, setfont methods [jdufresne].
Removed unused private functions in setup.py and build_dep.py [radarhere].
BUG: Empty image mode no longer causes a crash [evalapply].
Remove 'MIT-like' from license [wiredfool].
Removed PIL 1.0 era TK readme that concerns Windows 95/NT [wiredfool].
Remove executable bit and shebang from OleFileIO.py [jwilk, radarhere].
Remove vendored version of olefile Python package in favor of upstream [jdufresne].
Removed the handles_eof flag in decode.c [wiredfool].
Removed deprecated internal "stretch" method [homm].
Platform2
Removed support for Python 2.6 and Python 3.2 [jdufresne].
Fixed bug in saving to fp-objects in Python >= 3.4 [radarhere].
Deprecations to plan for
Deprecated2
Deprecate ImageOps undocumented functions gaussian_blur, gblur, unsharp_mask, usm and box_blur in favor of ImageFilter implementations [homm].
Use Integer division to eliminate deprecation warning. [mastermatt].
API changes
Generated by DepDelta from published Python source. Not mixed with prose notes.
- added:
export version
- removed:
variable i16 - removed:
variable i32 - removed:
variable i8 - removed:
variable o16 - removed:
variable o32 - removed:
variable o8
- removed:
variable i16 - removed:
variable i32 - removed:
variable i8
- removed:
variable i32
- removed:
variable i32 - removed:
variable o32
- removed:
variable i16 - removed:
variable i32 - removed:
variable i8 - removed:
variable o8
- removed:
variable i32
- removed:
variable i16
- removed:
variable i16 - removed:
variable i8 - removed:
variable o16 - removed:
variable o8
- removed:
variable i8
- removed:
variable i16 - removed:
variable i32 - removed:
variable i8
- changed:
method Image.resize(size, resample=…) → method Image.resize(size, resample=…, box=…) - changed:
method Image.rotate(angle, resample=…, expand=…) → method Image.rotate(angle, resample=…, expand=…, center=…, translate=…) - added:
function linear_gradient(mode) - added:
function radial_gradient(mode) - added:
function register_decoder(name, decoder) - added:
function register_encoder(name, encoder) - added:
function register_extensions(id, extensions) - added:
function registered_extensions() - added:
method Image.alpha_composite(im, dest=…, source=…) - added:
method Image.getchannel(channel) - added:
method Image.remap_palette(dest_map, source_palette=…) - added:
variable DECODERS - added:
variable ENCODERS - added:
variable HAS_PATHLIB - added:
variable TRANSVERSE
- removed:
method ImageDraw.setfill(onoff) - removed:
method ImageDraw.setfont(font) - removed:
method ImageDraw.setink(ink) - changed:
function floodfill(image, xy, value, border=…) → function floodfill(image, xy, value, border=…, thresh=…) - changed:
method ImageDraw.multiline_text(xy, text, fill=…, font=…, anchor=…, spacing=…, align=…) → method ImageDraw.multiline_text(xy, text, fill=…, font=…, anchor=…, spacing=…, align=…, direction=…, features=…) - changed:
method ImageDraw.multiline_textsize(text, font=…, spacing=…) → method ImageDraw.multiline_textsize(text, font=…, spacing=…, direction=…, features=…) - changed:
method ImageDraw.textsize(text, font=…, *args, **kwargs) → method ImageDraw.textsize(text, font=…, spacing=…, direction=…, features=…)
- added:
class PyCodecState(object) - added:
class PyDecoder(object) - added:
constructor PyCodecState() - added:
constructor PyDecoder(mode, *args) - added:
method PyCodecState.extents() - added:
method PyDecoder.cleanup() - added:
method PyDecoder.decode(buffer) - added:
method PyDecoder.init(args) - added:
method PyDecoder.set_as_raw(data, rawmode=…) - added:
method PyDecoder.setfd(fd) - added:
method PyDecoder.setimage(im, extents=…) - added:
property PyDecoder.pulls_fd
- changed:
class GaussianBlur(Filter) → class GaussianBlur(MultibandFilter) - changed:
class Kernel(Filter) → class Kernel(MultibandFilter) - changed:
class UnsharpMask(Filter) → class UnsharpMask(MultibandFilter) - added:
class BoxBlur(MultibandFilter) - added:
class MultibandFilter(Filter) - added:
constructor BoxBlur(radius) - added:
field BoxBlur.name - added:
method BoxBlur.filter(image)
- changed:
constructor FreeTypeFont(font=…, size=…, index=…, encoding=…) → constructor FreeTypeFont(font=…, size=…, index=…, encoding=…, layout_engine=…) - changed:
function truetype(font=…, size=…, index=…, encoding=…) → function truetype(font=…, size=…, index=…, encoding=…, layout_engine=…) - changed:
method FreeTypeFont.font_variant(font=…, size=…, index=…, encoding=…) → method FreeTypeFont.font_variant(font=…, size=…, index=…, encoding=…, layout_engine=…) - changed:
method FreeTypeFont.getmask(text, mode=…) → method FreeTypeFont.getmask(text, mode=…, direction=…, features=…) - changed:
method FreeTypeFont.getmask2(text, mode=…, fill=…) → method FreeTypeFont.getmask2(text, mode=…, fill=…, direction=…, features=…, *args, **kwargs) - changed:
method FreeTypeFont.getsize(text) → method FreeTypeFont.getsize(text, direction=…, features=…) - changed:
method TransposedFont.getmask(text, mode=…) → method TransposedFont.getmask(text, mode=…, *args, **kwargs) - changed:
method TransposedFont.getsize(text) → method TransposedFont.getsize(text, *args, **kwargs) - added:
method ImageFont.getmask(text, mode=…, *args, **kwargs) - added:
method ImageFont.getsize(text, *args, **kwargs) - added:
variable LAYOUT_BASIC - added:
variable LAYOUT_RAQM
- removed:
variable gblur - removed:
variable usm - added:
function gblur(im, radius=…) - added:
function usm(im, radius=…, percent=…, threshold=…)
- added:
field MacViewer.options - added:
field UnixViewer.format - added:
field UnixViewer.options - added:
field Viewer.options
- removed:
variable tkinter - added:
variable ffi
- removed:
method Dib.fromstring(*args, **kw) - removed:
method Dib.tostring(*args, **kw)
- removed:
variable i16 - removed:
variable i32 - removed:
variable i8 - removed:
variable o8
- removed:
variable i16 - removed:
variable i32 - removed:
variable i8 - removed:
variable o8
- removed:
variable i16 - removed:
variable o16 - added:
class MspDecoder(ImageFile.PyDecoder) - added:
method MspDecoder.decode(buffer)
- removed:
class OleFileIO(object) - removed:
class OleMetadata(object) - removed:
constructor OleFileIO(filename=…, raise_defects=…, write_mode=…, debug=…, path_encoding=…) - removed:
constructor OleMetadata() - removed:
field OleMetadata.DOCSUM_ATTRIBS - removed:
field OleMetadata.SUMMARY_ATTRIBS - removed:
function debug_pass(msg) - removed:
function debug_print(msg) - removed:
function filetime2datetime(filetime) - removed:
function i16(c, o=…) - removed:
function i32(c, o=…) - removed:
function i8(c) - removed:
function isOleFile(filename) - removed:
function set_debug_mode(debug_mode) - removed:
method OleFileIO.close() - removed:
method OleFileIO.dumpdirectory() - removed:
method OleFileIO.dumpfat(fat, firstindex=…) - removed:
method OleFileIO.dumpsect(sector, firstindex=…) - removed:
method OleFileIO.exists(filename) - removed:
method OleFileIO.get_metadata() - removed:
method OleFileIO.get_rootentry_name() - removed:
method OleFileIO.get_size(filename) - removed:
method OleFileIO.get_type(filename) - removed:
method OleFileIO.getctime(filename) - removed:
method OleFileIO.getmtime(filename) - removed:
method OleFileIO.getproperties(filename, convert_time=…, no_conversion=…) - removed:
method OleFileIO.getsect(sect) - removed:
method OleFileIO.listdir(streams=…, storages=…) - removed:
method OleFileIO.loaddirectory(sect) - removed:
method OleFileIO.loadfat(header) - removed:
method OleFileIO.loadfat_sect(sect) - removed:
method OleFileIO.loadminifat() - removed:
method OleFileIO.open(filename, write_mode=…) - removed:
method OleFileIO.openstream(filename) - removed:
method OleFileIO.raise_defect(defect_level, message, exception_type=…) - removed:
method OleFileIO.sect2array(sect) - removed:
method OleFileIO.write_sect(sect, data, padding=…) - removed:
method OleFileIO.write_stream(stream_name, data) - removed:
method OleMetadata.dump() - removed:
method OleMetadata.parse_properties(olefile) - removed:
variable DEBUG_MODE - removed:
variable DEFAULT_PATH_ENCODING - removed:
variable DEFECT_FATAL - removed:
variable DEFECT_INCORRECT - removed:
variable DEFECT_POTENTIAL - removed:
variable DEFECT_UNSURE - removed:
variable DIFSECT - removed:
variable ENDOFCHAIN - removed:
variable FATSECT - removed:
variable FREESECT - removed:
variable KEEP_UNICODE_NAMES - removed:
variable MAGIC - removed:
variable MAXREGSECT - removed:
variable MAXREGSID - removed:
variable MINIMAL_OLEFILE_SIZE - removed:
variable NOSTREAM - removed:
variable STGTY_EMPTY - removed:
variable STGTY_LOCKBYTES - removed:
variable STGTY_PROPERTY - removed:
variable STGTY_ROOT - removed:
variable STGTY_STORAGE - removed:
variable STGTY_STREAM - removed:
variable UINT32 - removed:
variable VT - removed:
variable VT_BLOB - removed:
variable VT_BLOB_OBJECT - removed:
variable VT_BOOL - removed:
variable VT_BSTR - removed:
variable VT_CARRAY - removed:
variable VT_CF - removed:
variable VT_CLSID - removed:
variable VT_CY - removed:
variable VT_DATE - removed:
variable VT_DECIMAL - removed:
variable VT_DISPATCH - removed:
variable VT_EMPTY - removed:
variable VT_ERROR - removed:
variable VT_FILETIME - removed:
variable VT_HRESULT - removed:
variable VT_I1 - removed:
variable VT_I2 - removed:
variable VT_I4 - removed:
variable VT_I8 - removed:
variable VT_INT - removed:
variable VT_LPSTR - removed:
variable VT_LPWSTR - removed:
variable VT_NULL - removed:
variable VT_PTR - removed:
variable VT_R4 - removed:
variable VT_R8 - removed:
variable VT_SAFEARRAY - removed:
variable VT_STORAGE - removed:
variable VT_STORED_OBJECT - removed:
variable VT_STREAM - removed:
variable VT_STREAMED_OBJECT - removed:
variable VT_UI1 - removed:
variable VT_UI2 - removed:
variable VT_UI4 - removed:
variable VT_UI8 - removed:
variable VT_UINT - removed:
variable VT_UNKNOWN - removed:
variable VT_USERDEFINED - removed:
variable VT_VARIANT - removed:
variable VT_VECTOR - removed:
variable VT_VOID - removed:
variable WORD_CLSID - removed:
variable basestring - removed:
variable check_streams - removed:
variable debug - removed:
variable iterrange - removed:
variable long
- removed:
variable o16b - removed:
variable o8
- removed:
variable i8 - added:
method PcdImageFile.load_end()
- removed:
variable b16 - removed:
variable b32 - removed:
variable i8 - removed:
variable l16 - removed:
variable l32
- removed:
variable i16 - removed:
variable i8 - removed:
variable o16 - removed:
variable o8
- removed:
variable i16
- removed:
variable i16 - removed:
variable i32 - removed:
variable i8 - removed:
variable o16 - removed:
variable o32 - removed:
variable o8
- removed:
variable i16 - removed:
variable i32 - removed:
variable i8
- removed:
variable i16 - removed:
variable i8 - added:
class SGI16Decoder(ImageFile.PyDecoder) - added:
method SGI16Decoder.decode(buffer) - added:
variable MODES
- removed:
variable i32
- removed:
variable i16 - removed:
variable i8 - removed:
variable o16 - removed:
variable o32 - removed:
variable o8
- removed:
method ImageFileDirectory_v2.as_dict() - removed:
variable i8 - removed:
variable o8 - added:
method TiffImageFile.load_end()
- removed:
variable i32
- removed:
function short(c, o=…) - removed:
variable dword - removed:
variable word
- removed:
variable o8
- added:
function check(feature) - added:
function check_feature(feature) - added:
function get_supported() - added:
function get_supported_features() - added:
variable features