mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +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