diff --git a/CHANGES.rst b/CHANGES.rst index 74d1b6b82..f8ec2d685 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,15 @@ Changelog (Pillow) 2.8.0 (unreleased) ------------------ +- Added copy method font_variant() and accessible properties to truetype() #1123 + [radarhere] + +- Fix ImagingEffectNoise #1128 + [hugovk] + +- Remove unreachable code + [hugovk] + - Let Python do the endian stuff + tests #1121 [amoibos, radarhere] @@ -52,7 +61,7 @@ Changelog (Pillow) - Fix MSVC compiler error: Use Py_ssize_t instead of ssize_t #1051 [cgohlke] -- Fix compiler error: MSVC needs varaibles defined at the start of the block #1048 +- Fix compiler error: MSVC needs variables defined at the start of the block #1048 [cgohlke] - The GIF Palette optimization algorithm is only applicable to mode='P' or 'L' #993 @@ -1787,7 +1796,7 @@ Changelog (Pillow) (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". + "regex" module have been replaced with "re". + Fixed attribute error when reading large PNG files (this bug was introduced in maintenance code released after the 1.1.1 @@ -2411,7 +2420,7 @@ Changelog (Pillow) the default value is 75. JPEG smooth smooth dithered images. value - is strengh (1-100). default is + is strength (1-100). default is off (0). PNG optimize minimize output file at the diff --git a/PIL/ImageFont.py b/PIL/ImageFont.py index cf1922c9e..a9c50e560 100644 --- a/PIL/ImageFont.py +++ b/PIL/ImageFont.py @@ -133,6 +133,11 @@ class FreeTypeFont: DeprecationWarning) font = file + self.path = font + self.size = size + self.index = index + self.encoding = encoding + if isPath(font): self.font = core.getfont(font, size, index, encoding) else: @@ -162,6 +167,22 @@ class FreeTypeFont: self.font.render(text, im.id, mode == "1") return im, offset + def font_variant(self, font=None, size=None, index=None, encoding=None): + """ + Create a copy of this FreeTypeFont object, + using any specified arguments to override the settings. + + Parameters are identical to the parameters used to initialize this + object, minus the deprecated 'file' argument. + + :return: A FreeTypeFont object. + """ + return FreeTypeFont(font=self.path if font is None else font, + size=self.size if size is None else size, + index=self.index if index is None else index, + encoding=self.encoding if encoding is None else + encoding) + ## # Wrapper that creates a transposed font from any existing font # object. @@ -255,8 +276,8 @@ def truetype(font=None, size=10, index=0, encoding="", filename=None): elif sys.platform in ('linux', 'linux2'): lindirs = os.environ.get("XDG_DATA_DIRS", "") if not lindirs: - #According to the freedesktop spec, XDG_DATA_DIRS should - #default to /usr/share + # According to the freedesktop spec, XDG_DATA_DIRS should + # default to /usr/share lindirs = '/usr/share' lindirs = lindirs.split(":") for lindir in lindirs: @@ -266,7 +287,8 @@ def truetype(font=None, size=10, index=0, encoding="", filename=None): filepath = os.path.join(walkroot, ttf_filename) return FreeTypeFont(filepath, size, index, encoding) elif sys.platform == 'darwin': - macdirs = ['/Library/Fonts/', '/System/Library/Fonts/', os.path.expanduser('~/Library/Fonts/')] + macdirs = ['/Library/Fonts/', '/System/Library/Fonts/', + os.path.expanduser('~/Library/Fonts/')] for macdir in macdirs: filepath = os.path.join(macdir, ttf_filename) if os.path.exists(filepath): diff --git a/PIL/PngImagePlugin.py b/PIL/PngImagePlugin.py index 7a9becd3b..d8593f90d 100644 --- a/PIL/PngImagePlugin.py +++ b/PIL/PngImagePlugin.py @@ -175,7 +175,7 @@ class iTXt(str): :param lang: language code :param tkey: UTF-8 version of the key name """ - + self = str.__new__(cls, text) self.lang = lang self.tkey = tkey @@ -198,7 +198,7 @@ class PngInfo: :param data: a byte string of the encoded data """ - + self.chunks.append((cid, data)) def add_itxt(self, key, value, lang="", tkey="", zip=False): @@ -211,7 +211,7 @@ class PngInfo: :param zip: compression flag """ - + if not isinstance(key, bytes): key = key.encode("latin-1", "strict") if not isinstance(value, bytes): @@ -235,7 +235,7 @@ class PngInfo: :param value: value for this key, text or an :py:class:`PIL.PngImagePlugin.iTXt` instance :param zip: compression flag - + """ if isinstance(value, iTXt): return self.add_itxt(key, value, value.lang, value.tkey, bool(zip)) @@ -462,7 +462,7 @@ class PngStream(ChunkStream): self.im_info[k] = self.im_text[k] = iTXt(v, lang, tk) self.check_text_memory(len(v)) - + return s @@ -729,10 +729,6 @@ def _save(im, fp, filename, chunk=putchunk, check=0): alpha_bytes = 2**bits chunk(fp, b"tRNS", alpha[:alpha_bytes]) - if 0: - # FIXME: to be supported some day - chunk(fp, b"gAMA", o32(int(gamma * 100000.0))) - dpi = im.encoderinfo.get("dpi") if dpi: chunk(fp, b"pHYs", diff --git a/README.rst b/README.rst index dfd3e2c31..c6cf3e419 100644 --- a/README.rst +++ b/README.rst @@ -7,8 +7,12 @@ Pillow is the "friendly" PIL fork by `Alex Clark and Contributors `_. Alternatively you can compile Pillow with with XCode. +We provide binaries for OS X in the form of `Python Wheels `_. Alternatively you can compile Pillow from soure with XCode. The easiest way to install external libraries is via `Homebrew `_. After you install Homebrew, run:: @@ -173,7 +173,7 @@ Install Pillow with:: $ pip install Pillow -Windows installation +Windows Installation -------------------- We provide binaries for Windows in the form of Python Eggs and `Python Wheels @@ -194,11 +194,11 @@ Python Eggs Python Wheels ^^^^^^^^^^^^^ -.. Note:: Experimental. Requires setuptools >=0.8 and pip >=1.4.1 +.. Note:: Requires setuptools >=0.8 and pip >=1.4.1. Some older versions of pip required the ``--use-wheel`` flag. :: - $ pip install --use-wheel Pillow + $ pip install Pillow If the above does not work, it's likely because we haven't uploaded a wheel for the latest version of Pillow. In that case, try pinning it @@ -206,10 +206,10 @@ to a specific version: :: - $ pip install --use-wheel Pillow==2.6.1 + $ pip install Pillow==2.6.1 -FreeBSD installation ---------------------- +FreeBSD Installation +-------------------- .. Note:: Only FreeBSD 10 tested diff --git a/libImaging/Dib.c b/libImaging/Dib.c index 8e138bd6b..55de7d9a5 100644 --- a/libImaging/Dib.c +++ b/libImaging/Dib.c @@ -204,19 +204,6 @@ ImagingNewDIB(const char *mode, int xsize, int ysize) #endif -#if 0 - { - /* DEBUG: dump palette to file */ - FILE *err = fopen("dib.pal", "w"); - for (i = 0; i < 256; i++) - fprintf(err, "%d: %d/%d/%d\n", i, - pal->palPalEntry[i].peRed, - pal->palPalEntry[i].peGreen, - pal->palPalEntry[i].peBlue); - fclose(err); - } -#endif - dib->palette = CreatePalette(pal); } diff --git a/libImaging/Effects.c b/libImaging/Effects.c index eb598d968..a3f5e7cd9 100644 --- a/libImaging/Effects.c +++ b/libImaging/Effects.c @@ -98,8 +98,8 @@ ImagingEffectNoise(int xsize, int ysize, float sigma) /* after numerical recipes */ double v1, v2, radius, factor; do { - v1 = rand()*(2.0/32767.0) - 1.0; - v2 = rand()*(2.0/32767.0) - 1.0; + v1 = rand()*(2.0/RAND_MAX) - 1.0; + v2 = rand()*(2.0/RAND_MAX) - 1.0; radius= v1*v1 + v2*v2; } while (radius >= 1.0); factor = sqrt(-2.0*log(radius)/radius); diff --git a/libImaging/Geometry.c b/libImaging/Geometry.c index f586974c3..97cbcf2ed 100644 --- a/libImaging/Geometry.c +++ b/libImaging/Geometry.c @@ -304,23 +304,6 @@ perspective_transform(double* xin, double* yin, int x, int y, void* data) return 1; } -#if 0 -static int -quadratic_transform(double* xin, double* yin, int x, int y, void* data) -{ - double* a = (double*) data; - - double a0 = a[0]; double a1 = a[1]; double a2 = a[2]; double a3 = a[3]; - double a4 = a[4]; double a5 = a[5]; double a6 = a[6]; double a7 = a[7]; - double a8 = a[8]; double a9 = a[9]; double a10 = a[10]; double a11 = a[11]; - - xin[0] = a0 + a1*x + a2*y + a3*x*x + a4*x*y + a5*y*y; - yin[0] = a6 + a7*x + a8*y + a9*x*x + a10*x*y + a11*y*y; - - return 1; -} -#endif - static int quad_transform(double* xin, double* yin, int x, int y, void* data) { diff --git a/libImaging/QuantHash.c b/libImaging/QuantHash.c index a1f99ed3a..48b7a973e 100644 --- a/libImaging/QuantHash.c +++ b/libImaging/QuantHash.c @@ -44,9 +44,6 @@ struct _HashTable { #define RESIZE_FACTOR 3 static int _hashtable_insert_node(HashTable *,HashNode *,int,int,CollisionFunc); -#if 0 -static int _hashtable_test(HashTable *); -#endif HashTable *hashtable_new(HashFunc hf,HashCmpFunc cf) { HashTable *h; @@ -132,22 +129,6 @@ static void _hashtable_resize(HashTable *h) { } } -#if 0 -static int _hashtable_test(HashTable *h) { - uint32_t i; - int j; - HashNode *n; - for (i=0;ilength;i++) { - for (n=h->table[i];n&&n->next;n=n->next) { - j=h->cmpFunc(h,n->key,n->next->key); - printf ("%c",j?(j<0?'-':'+'):'='); - } - printf ("\n"); - } - return 0; -} -#endif - static int _hashtable_insert_node(HashTable *h,HashNode *node,int resize,int update,CollisionFunc cf) { uint32_t hash=h->hashFunc(h,node->key)%h->length; HashNode **n,*nv;