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