mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-30 23:47:27 +03:00 
			
		
		
		
	Merge branch 'master' into box-in-thumbnail
This commit is contained in:
		
						commit
						c35fb6fb67
					
				
							
								
								
									
										6
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							|  | @ -83,12 +83,6 @@ jobs: | |||
|         name: errors | ||||
|         path: Tests/errors | ||||
| 
 | ||||
|     - name: Docs | ||||
|       if: matrix.python-version == 3.8 | ||||
|       run: | | ||||
|         pip install sphinx-rtd-theme | ||||
|         make doccheck | ||||
| 
 | ||||
|     - name: After success | ||||
|       if: success() | ||||
|       run: | | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| set -e | ||||
| 
 | ||||
| sudo apt-get update | ||||
| sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-tk\ | ||||
| sudo apt-get -qq install libfreetype6-dev liblcms2-dev python3-tk\ | ||||
|                          ghostscript libffi-dev libjpeg-turbo-progs libopenjp2-7-dev\ | ||||
|                          cmake imagemagick libharfbuzz-dev libfribidi-dev | ||||
| 
 | ||||
|  | @ -20,8 +20,8 @@ if [[ $TRAVIS_PYTHON_VERSION == 3.* ]]; then | |||
|     pip install pyqt5 | ||||
| fi | ||||
| 
 | ||||
| # docs only on Python 3.7 | ||||
| if [ "$TRAVIS_PYTHON_VERSION" == "3.7" ]; then pip install -r requirements.txt ; fi | ||||
| # docs only on Python 3.8 | ||||
| if [ "$TRAVIS_PYTHON_VERSION" == "3.8" ]; then pip install -r requirements.txt ; fi | ||||
| 
 | ||||
| # webp | ||||
| pushd depends && ./install_webp.sh && popd | ||||
|  |  | |||
|  | @ -5,4 +5,4 @@ set -e | |||
| python -m pytest -v -x --cov PIL --cov Tests --cov-report term Tests | ||||
| 
 | ||||
| # Docs | ||||
| if [ "$TRAVIS_PYTHON_VERSION" == "3.7" ]; then make doccheck; fi | ||||
| if [ "$TRAVIS_PYTHON_VERSION" == "3.8" ]; then make doccheck; fi | ||||
|  |  | |||
|  | @ -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] | ||||
| 
 | ||||
|  |  | |||
|  | @ -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) | ||||
| 
 | ||||
|  |  | |||
|  | @ -42,7 +42,7 @@ clean: | |||
| 	-rm -rf $(BUILDDIR)/* | ||||
| 
 | ||||
| html: | ||||
| 	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html | ||||
| 	$(SPHINXBUILD) -b html -W --keep-going $(ALLSPHINXOPTS) $(BUILDDIR)/html | ||||
| 	@echo | ||||
| 	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html." | ||||
| 
 | ||||
|  |  | |||
|  | @ -47,7 +47,8 @@ Basic Installation | |||
| 
 | ||||
| Install Pillow with :command:`pip`:: | ||||
| 
 | ||||
|     $ pip install Pillow | ||||
|     python -m pip install pip | ||||
|     python -m pip install Pillow | ||||
| 
 | ||||
| 
 | ||||
| Windows Installation | ||||
|  | @ -58,7 +59,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 | ||||
|  | @ -69,7 +71,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 | ||||
| ^^^^^^^^^^^^^^^^^^ | ||||
|  | @ -79,7 +82,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 | ||||
|  | @ -92,11 +96,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 py36-pillow | ||||
|   pkg install py36-pillow | ||||
| 
 | ||||
| .. note:: | ||||
| 
 | ||||
|  | @ -191,7 +195,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 | ||||
|  | @ -201,7 +206,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 | ||||
|  | @ -245,11 +250,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 | ||||
|  | @ -265,21 +270,22 @@ tools. | |||
| The easiest way to install external libraries is via `Homebrew | ||||
| <https://brew.sh/>`_. 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 | ||||
| ^^^^^^^^^^^^^^^^^^^ | ||||
|  | @ -293,17 +299,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. | ||||
| 
 | ||||
|  | @ -316,33 +322,33 @@ 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 \ | ||||
|         libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk \ | ||||
|     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 python3-tk \ | ||||
|         libharfbuzz-dev libfribidi-dev | ||||
| 
 | ||||
| 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 | ||||
| 
 | ||||
|  | @ -359,7 +365,7 @@ Building on Android | |||
| Basic Android support has been added for compilation within the Termux | ||||
| environment. The dependencies can be installed by:: | ||||
| 
 | ||||
|     $ pkg install -y python ndk-sysroot clang make \ | ||||
|     pkg install -y python ndk-sysroot clang make \ | ||||
|         libjpeg-turbo | ||||
| 
 | ||||
| This has been tested within the Termux app on ChromeOS, on x86. | ||||
|  |  | |||
|  | @ -321,12 +321,15 @@ 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" | ||||
|             + o32(offset + image)  # file type (magic) | ||||
|             + o32(0)  # file size | ||||
|             + o32(offset)  # reserved | ||||
|         )  # image data offset | ||||
|             b"BM"  # file type (magic) | ||||
|             + o32(file_size)  # file size | ||||
|             + o32(0)  # reserved | ||||
|             + o32(offset)  # image data offset | ||||
|         ) | ||||
| 
 | ||||
|     # bitmap info header | ||||
|     fp.write( | ||||
|  |  | |||
|  | @ -1127,8 +1127,7 @@ class Image: | |||
|         Configures the image file loader so it returns a version of the | ||||
|         image that as closely as possible matches the given mode and | ||||
|         size. For example, you can use this method to convert a color | ||||
|         JPEG to greyscale while loading it, or to extract a 128x192 | ||||
|         version from a PCD file. | ||||
|         JPEG to greyscale while loading it. | ||||
| 
 | ||||
|         If any changes are made, returns a tuple with the chosen ``mode`` and | ||||
|         ``box`` with coordinates of the original image within the altered one. | ||||
|  | @ -1138,7 +1137,7 @@ class Image: | |||
|         effect. | ||||
| 
 | ||||
|         Note: This method is not implemented for most images. It is | ||||
|         currently implemented only for JPEG and PCD images. | ||||
|         currently implemented only for JPEG and MPO images. | ||||
| 
 | ||||
|         :param mode: The requested mode. | ||||
|         :param size: The requested size. | ||||
|  | @ -2187,12 +2186,14 @@ class Image: | |||
| 
 | ||||
|           It may also be an :py:class:`~PIL.Image.ImageTransformHandler` | ||||
|           object:: | ||||
| 
 | ||||
|             class Example(Image.ImageTransformHandler): | ||||
|                 def transform(size, method, data, resample, fill=1): | ||||
|                     # Return result | ||||
| 
 | ||||
|           It may also be an object with a :py:meth:`~method.getdata` method | ||||
|           that returns a tuple supplying new **method** and **data** values:: | ||||
| 
 | ||||
|             class Example(object): | ||||
|                 def getdata(self): | ||||
|                     method = Image.EXTENT | ||||
|  |  | |||
|  | @ -234,6 +234,7 @@ def pad(image, size, method=Image.BICUBIC, color=None, centering=(0.5, 0.5)): | |||
|     :param color: The background color of the padded image. | ||||
|     :param centering: Control the position of the original image within the | ||||
|                       padded version. | ||||
| 
 | ||||
|                           (0.5, 0.5) will keep the image centered | ||||
|                           (0, 0) will keep the image aligned to the top left | ||||
|                           (1, 1) will keep the image aligned to the bottom | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user