Merge branch 'master' into box-in-thumbnail

This commit is contained in:
Andrew Murray 2019-12-24 18:18:34 +11:00 committed by GitHub
commit c35fb6fb67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 60 additions and 45 deletions

View File

@ -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: |

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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)

View File

@ -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."

View File

@ -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.

View File

@ -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(

View File

@ -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

View File

@ -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