From a27e676b1128c4db81843d0f8556fbc3b3d9b415 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 19 Nov 2019 14:47:15 +0200 Subject: [PATCH 1/7] Recommend upgrading pip before Pillow, and use python -m pip --- docs/installation.rst | 52 ++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 4ccc47ae4..796ba9b38 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -46,7 +46,8 @@ Basic Installation Install Pillow with :command:`pip`:: - $ pip install Pillow + python -m pip install pip + python -m pip install Pillow Windows Installation @@ -57,7 +58,8 @@ supported Pythons in both 32 and 64-bit versions in wheel, egg, and executable installers. These binaries have all of the optional libraries included except for raqm and libimagequant:: - > pip install Pillow + python -m pip install pip + python -m pip install Pillow macOS Installation @@ -68,7 +70,8 @@ versions in the wheel format. These include support for all optional libraries except libimagequant. Raqm support requires libraqm, fribidi, and harfbuzz to be installed separately:: - $ pip install Pillow + python -m pip install pip + python -m pip install Pillow Linux Installation ^^^^^^^^^^^^^^^^^^ @@ -78,7 +81,8 @@ versions in the manylinux wheel format. These include support for all optional libraries except libimagequant. Raqm support requires libraqm, fribidi, and harfbuzz to be installed separately:: - $ pip install Pillow + python -m pip install pip + python -m pip install Pillow Most major Linux distributions, including Fedora, Debian/Ubuntu and ArchLinux also include Pillow in packages that previously contained @@ -194,7 +198,8 @@ Many of Pillow's features require external libraries: Once you have installed the prerequisites, run:: - $ pip install Pillow + python -m pip install pip + python -m pip install Pillow If the prerequisites are installed in the standard library locations for your machine (e.g. :file:`/usr` or :file:`/usr/local`), no @@ -204,7 +209,7 @@ those locations by editing :file:`setup.py` or :file:`setup.cfg`, or by adding environment variables on the command line:: - $ CFLAGS="-I/usr/pkg/include" pip install pillow + CFLAGS="-I/usr/pkg/include" python -m pip install pillow If Pillow has been previously built without the required prerequisites, it may be necessary to manually clear the pip cache or @@ -248,11 +253,11 @@ Build Options Sample usage:: - $ MAX_CONCURRENCY=1 python setup.py build_ext --enable-[feature] install + MAX_CONCURRENCY=1 python setup.py build_ext --enable-[feature] install or using pip:: - $ pip install pillow --global-option="build_ext" --global-option="--enable-[feature]" + python -m pip install pillow --global-option="build_ext" --global-option="--enable-[feature]" Building on macOS @@ -268,21 +273,22 @@ tools. The easiest way to install external libraries is via `Homebrew `_. After you install Homebrew, run:: - $ brew install libtiff libjpeg webp little-cms2 + brew install libtiff libjpeg webp little-cms2 To install libraqm on macOS use Homebrew to install its dependencies:: - $ brew install freetype harfbuzz fribidi + brew install freetype harfbuzz fribidi Then see ``depends/install_raqm_cmake.sh`` to install libraqm. Now install Pillow with:: - $ pip install Pillow + python -m pip install pip + python -m pip install Pillow or from within the uncompressed source directory:: - $ python setup.py install + python setup.py install Building on Windows ^^^^^^^^^^^^^^^^^^^ @@ -296,17 +302,17 @@ Building on FreeBSD .. Note:: Only FreeBSD 10 and 11 tested -Make sure you have Python's development libraries installed.:: +Make sure you have Python's development libraries installed:: - $ sudo pkg install python2 + sudo pkg install python2 Or for Python 3:: - $ sudo pkg install python3 + sudo pkg install python3 Prerequisites are installed on **FreeBSD 10 or 11** with:: - $ sudo pkg install jpeg-turbo tiff webp lcms2 freetype2 openjpeg harfbuzz fribidi + sudo pkg install jpeg-turbo tiff webp lcms2 freetype2 openjpeg harfbuzz fribidi Then see ``depends/install_raqm_cmake.sh`` to install libraqm. @@ -319,25 +325,25 @@ development libraries installed. In Debian or Ubuntu:: - $ sudo apt-get install python-dev python-setuptools + sudo apt-get install python-dev python-setuptools Or for Python 3:: - $ sudo apt-get install python3-dev python3-setuptools + sudo apt-get install python3-dev python3-setuptools In Fedora, the command is:: - $ sudo dnf install python-devel redhat-rpm-config + sudo dnf install python-devel redhat-rpm-config Or for Python 3:: - $ sudo dnf install python3-devel redhat-rpm-config + sudo dnf install python3-devel redhat-rpm-config .. Note:: ``redhat-rpm-config`` is required on Fedora 23, but not earlier versions. Prerequisites are installed on **Ubuntu 16.04 LTS** with:: - $ sudo apt-get install libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev \ + sudo apt-get install libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev \ libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk \ libharfbuzz-dev libfribidi-dev @@ -345,7 +351,7 @@ Then see ``depends/install_raqm.sh`` to install libraqm. Prerequisites are installed on recent **RedHat** **Centos** or **Fedora** with:: - $ sudo dnf install libtiff-devel libjpeg-devel openjpeg2-devel zlib-devel \ + sudo dnf install libtiff-devel libjpeg-devel openjpeg2-devel zlib-devel \ freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel \ harfbuzz-devel fribidi-devel libraqm-devel libimagequant-devel @@ -362,7 +368,7 @@ Building on Android Basic Android support has been added for compilation within the Termux environment. The dependencies can be installed by:: - $ pkg -y install python python-dev ndk-sysroot clang make \ + pkg -y install python python-dev ndk-sysroot clang make \ libjpeg-turbo-dev This has been tested within the Termux app on ChromeOS, on x86. From f663079a13f8b963ef0eac0212f4c0c2a36c69f0 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 7 Dec 2019 09:26:48 +1100 Subject: [PATCH 2/7] Removed prompts [ci skip] --- docs/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 796ba9b38..39005db8e 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -95,11 +95,11 @@ Pillow can be installed on FreeBSD via the official Ports or Packages systems: **Ports**:: - $ cd /usr/ports/graphics/py-pillow && make install clean + cd /usr/ports/graphics/py-pillow && make install clean **Packages**:: - $ pkg install py27-pillow + pkg install py27-pillow .. note:: From 209faf1b62fa7ed6c9d8b2fc7bd46e1c7e54e0bd Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 20 Dec 2019 06:24:38 +1100 Subject: [PATCH 3/7] Updated CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index c1eab0c2e..1ea09fff8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 7.0.0 (unreleased) ------------------ +- Change default resize resampling filter from NEAREST to BICUBIC #4255 + [homm] + - Better thumbnail aspect ratio preservation #4256 [homm] From ce62dca3264db9b31ce251106c5170eac491e92e Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 21 Dec 2019 08:15:48 +1100 Subject: [PATCH 4/7] Aligned comments correctly --- src/PIL/BmpImagePlugin.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/PIL/BmpImagePlugin.py b/src/PIL/BmpImagePlugin.py index cdef77ced..5f88c2b75 100644 --- a/src/PIL/BmpImagePlugin.py +++ b/src/PIL/BmpImagePlugin.py @@ -322,11 +322,11 @@ def _save(im, fp, filename, bitmap_header=True): if bitmap_header: offset = 14 + header + colors * 4 fp.write( - b"BM" - + o32(offset + image) # file type (magic) - + o32(0) # file size - + o32(offset) # reserved - ) # image data offset + b"BM" # file type (magic) + + o32(offset + image) # file size + + o32(0) # reserved + + o32(offset) # image data offset + ) # bitmap info header fp.write( From 945b4e9c826ab51530f716b512575d1d8f29dc00 Mon Sep 17 00:00:00 2001 From: Alexander Date: Sat, 21 Dec 2019 00:25:52 +0300 Subject: [PATCH 5/7] add references, fix release notes syntax --- docs/releasenotes/7.0.0.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/releasenotes/7.0.0.rst b/docs/releasenotes/7.0.0.rst index f9634e8cc..ac4fcb922 100644 --- a/docs/releasenotes/7.0.0.rst +++ b/docs/releasenotes/7.0.0.rst @@ -52,8 +52,8 @@ Default resampling filter The default resampling filter has been changed to the high-quality convolution ``Image.BICUBIC`` instead of ``Image.NEAREST``, for the :py:meth:`~PIL.Image.Image.resize` -method and the :py:meth:`~PIL.ImageOps.pad``, :py:meth:`~PIL.ImageOps.scale`` -and :py:meth:`~PIL.ImageOps.fit`` functions. +method and the :py:meth:`~PIL.ImageOps.pad`, :py:meth:`~PIL.ImageOps.scale` +and :py:meth:`~PIL.ImageOps.fit` functions. ``Image.NEAREST`` is still always used for images in "P" and "1" modes. See :ref:`concept-filters` to learn the difference. In short, ``Image.NEAREST`` is a very fast filter, but simple and low-quality. @@ -87,8 +87,8 @@ Image.__del__ ^^^^^^^^^^^^^ Implicitly closing the image's underlying file in ``Image.__del__`` has been removed. -Use a context manager or call ``Image.close()`` instead to close the file in a -deterministic way. +Use a context manager or call :py:meth:`~PIL.Image.Image.close` instead to close +the file in a deterministic way. Previous method: @@ -107,5 +107,5 @@ Use instead: Better thumbnail aspect ratio preservation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -When calculating the new dimensions in ``Image.thumbnail``, round to the -nearest integer, instead of always rounding down. +When calculating the new dimensions in :py:meth:`~PIL.Image.Image.thumbnail`, +round to the nearest integer, instead of always rounding down. From 4580b156b77e490d8db4545beb7a88f9494bf718 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 21 Dec 2019 08:37:40 +1100 Subject: [PATCH 6/7] Raise an error if BMP file size is too large when saving --- Tests/test_file_bmp.py | 7 +++++++ src/PIL/BmpImagePlugin.py | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Tests/test_file_bmp.py b/Tests/test_file_bmp.py index 76cd98aba..338f52cd7 100644 --- a/Tests/test_file_bmp.py +++ b/Tests/test_file_bmp.py @@ -41,6 +41,13 @@ class TestFileBmp(PillowTestCase): self.assertEqual(im.size, reloaded.size) self.assertEqual(reloaded.format, "BMP") + def test_save_too_large(self): + outfile = self.tempfile("temp.bmp") + with Image.new("RGB", (1, 1)) as im: + im._size = (37838, 37838) + with self.assertRaises(ValueError): + im.save(outfile) + def test_dpi(self): dpi = (72, 72) diff --git a/src/PIL/BmpImagePlugin.py b/src/PIL/BmpImagePlugin.py index 5f88c2b75..85e2350c5 100644 --- a/src/PIL/BmpImagePlugin.py +++ b/src/PIL/BmpImagePlugin.py @@ -321,9 +321,12 @@ def _save(im, fp, filename, bitmap_header=True): # bitmap header if bitmap_header: offset = 14 + header + colors * 4 + file_size = offset + image + if file_size > 2 ** 32 - 1: + raise ValueError("File size is too large for the BMP format") fp.write( b"BM" # file type (magic) - + o32(offset + image) # file size + + o32(file_size) # file size + o32(0) # reserved + o32(offset) # image data offset ) From 49a5bd3602001e00f276efb333a12f25fed61258 Mon Sep 17 00:00:00 2001 From: Alexander Karpinsky Date: Sat, 21 Dec 2019 03:42:06 +0300 Subject: [PATCH 7/7] Updated CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 1ea09fff8..fe50b55e0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 7.0.0 (unreleased) ------------------ +- Fixed black lines on upscaled images with the BOX filter #4278 + [homm] + - Change default resize resampling filter from NEAREST to BICUBIC #4255 [homm]