054-python库Pillow

上一篇:053-python库PIL(三)

前记

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

一、安装Pillow

如果安装了Anaconda,Pillow就已经可用了。否则,需要在命令行下通过pip安装:

$ pip install pillow

如果遇到Permission denied安装失败,请加上sudo重试。

操作图像示例

from PIL import Image

# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 获得图像尺寸:
w, h = im.size
print('Original image size: %sx%s' % (w, h))
# 缩放到50%:
im.thumbnail((w//2, h//2))
print('Resize image to: %sx%s' % (w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('thumbnail.jpg', 'jpeg')

其他功能如切片、旋转、滤镜、输出文字、调色板等一应俱全。

from PIL import Image, ImageFilter

# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 应用模糊滤镜:
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')

PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图。比如要生成字母验证码图片:

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

# 随机字母:
def rndChar():
    return chr(random.randint(65, 90))

# 随机颜色1:
def rndColor():
    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 随机颜色2:
def rndColor2():
    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
    draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

我们用随机颜色填充背景,再画上文字,最后对图像进行模糊,得到验证码图片如下:

image.png

如果运行的时候报错:

IOError: cannot open resource

这是因为PIL无法定位到字体文件的位置,可以根据操作系统提供绝对路径,比如:

'/Library/Fonts/Arial.ttf'

二、官方文档

pillow官方文档

image.png
image.png
Warnings(需要特别注意)

Pillow and PIL cannot co-exist in the same environment. Before installing Pillow, please uninstall PIL.

Pillow库和PIL库不能在相同的环境中共存。在安装Pillow库之前,请卸载PIL库。

Pillow >= 1.0 no longer supports “import Image”. Please use “from PIL import Image” instead.

Pillow库> = 1.0不再支持“import Image”。请使用“from PIL import Image”。

Pillow >= 2.1.0 no longer supports “import _imaging”. Please use “from PIL.Image import core as _imaging” instead.

Pillow库> = 2.1.0不再支持“import _imaging”。请使用“from PIL.Image import core as _imaging”代替。

版本支持列表:

image.png

三、细说安装

The following instructions will install Pillow with support for most common image formats. See External Libraries for a full list of external libraries supported.

下面的说明将安装Pillow库支持最常用的图像格式。看到外部库的完整列表外部库支持。

Install Pillow with pip:

$ pip install Pillow
  • Windows Installation(Windows安装)

We provide Pillow binaries for Windows compiled for the matrix of 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:

我们提供Pillow库为Windows二进制文件编译支持矩阵的蟒蛇在32和64位版本轮,鸡蛋,和可执行的安装程序。这些二进制文件的所有可选库包括除了raqm和libimagequant:

> pip install Pillow
  • macOS Installation(macOS安装)

We provide binaries for macOS for each of the supported Python 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:

我们提供二进制文件为每个支持的macOS车轮格式的Python版本。这包括支持所有可选库libimagequant除外。Raqm支持需要libraqm、fribidi harfbuzz单独安装:

$ pip install Pillow
  • Linux Installation(Linux安装)

We provide binaries for Linux for each of the supported Python 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:

我们为Linux提供二进制文件为每个支持的Python版本manylinux轮格式。这包括支持所有可选库libimagequant除外。Raqm支持需要libraqm、fribidi harfbuzz单独安装:

$ pip install Pillow

Most major Linux distributions, including Fedora, Debian/Ubuntu and ArchLinux also include Pillow in packages that previously contained PIL e.g. python-imaging.

大多数Linux发行版默认包含Pillow库,包括Fedora, Debian / Ubuntu和ArchLinux还包括以前包含PIL库如python-imaging 包。

FreeBSD Installation(FreeBSD安装)

Pillow can be installed on FreeBSD via the official Ports or Packages systems:

Pillow库可以通过官方的渠道或包系统安装在FreeBSD系统:

Ports:

$ cd /usr/ports/graphics/py-pillow && make install clean

Packages:

$ pkg install py27-pillow

The Pillow FreeBSD port and packages are tested by the ports team with all supported FreeBSD versions and against Python 2.7 and 3.x.

Pillow库FreeBSD港口和包由端口测试团队与所有支持FreeBSD和Python 2.7版本和3.x版本。

Building From Source(从源代码构建)

Download and extract the compressed archive from PyPI.

从PyPI下载和提取压缩存档。

  • External Libraries(外部库)

You do not need to install all supported external libraries to use Pillow’s basic features. Zlib and libjpeg are required by default.

你不需要安装所有支持的外部库使用Pillow库的基本特性。Zlib和libjpeg默认是必需的。

There are scripts to install the dependencies for some operating systems included in the depends directory. Also see the Dockerfiles in our docker images repo.

脚本安装的依赖关系有一些操作系统包含在看目录。也在docker images repo看到Dockerfiles。

Pillow库的许多特性需要外部库:

libjpeg provides JPEG functionality.
Pillow has been tested with libjpeg versions 6b, 8, 9-9c and libjpeg-turbo version 8.
Starting with Pillow 3.0.0, libjpeg is required by default, but may be disabled with the --disable-jpeg flag.
zlib provides access to compressed PNGs
Starting with Pillow 3.0.0, zlib is required by default, but may be disabled with the --disable-zlib flag.
libtiff provides compressed TIFF functionality
Pillow has been tested with libtiff versions 3.x and 4.0
libfreetype provides type related services
littlecms provides color management
Pillow version 2.2.1 and below uses liblcms1, Pillow 2.3.0 and above uses liblcms2. Tested with 1.19 and 2.7-2.9.
libwebp provides the WebP format.
Pillow has been tested with version 0.1.3, which does not read transparent WebP files. Versions 0.3.0 and above support transparency.
tcl/tk provides support for tkinter bitmap and photo images.
openjpeg provides JPEG 2000 functionality.
Pillow has been tested with openjpeg 2.0.0 and 2.1.0.
Pillow does not support the earlier 1.5 series which ships with Ubuntu <= 14.04 and Debian Jessie.
libimagequant provides improved color quantization
Pillow has been tested with libimagequant 2.6-2.12.2
Libimagequant is licensed GPLv3, which is more restrictive than the Pillow license, therefore we will not be distributing binaries with libimagequant support enabled.
Windows support: Libimagequant requires VS2013/MSVC 18 to compile, so it is unlikely to work with Python 2.7 on Windows.
libraqm provides complex text layout support.
libraqm provides bidirectional text support (using FriBiDi), shaping (using HarfBuzz), and proper script itemization. As a result, Raqm can support most writing systems covered by Unicode.
libraqm depends on the following libraries: FreeType, HarfBuzz, FriBiDi, make sure that you install them before installing libraqm if not available as package in your system.
setting text direction or font features is not supported without libraqm.
libraqm is dynamically loaded in Pillow 5.0.0 and above, so support is available if all the libraries are installed.
Windows support: Raqm support is currently unsupported on Windows.

详见官方文档查看

Once you have installed the prerequisites, run:

一旦你安装了先决条件,运行:

$ pip install Pillow

If the prerequisites are installed in the standard library locations for your machine (e.g. /usr or /usr/local), no additional configuration should be required. If they are installed in a non-standard location, you may need to configure setuptools to use those locations by editing setup.py or setup.cfg, or by adding environment variables on the command line:

如果前提是安装在机器的标准库的位置(例如,/ usr或/usr/local),不需要额外的配置。如果他们是安装在标准位置,您可能需要配置使用setuptools这些位置通过编辑设置。py或设置。cfg或在命令行上添加环境变量:

$ CFLAGS="-I/usr/pkg/include" pip install pillow

If Pillow has been previously built without the required prerequisites, it may be necessary to manually clear the pip cache or build without cache using the --no-cache-dir option to force a build with newly installed external libraries.

如果枕头之前构建没有所需的先决条件,可能需要手动清除pip缓存或构建缓存使用——no-cache-dir选项强制建立和新安装的外部库。

  • Build Options(构建选项)

Environment variable: MAX_CONCURRENCY=n. By default, Pillow will use multiprocessing to build the extension on all available CPUs, but not more than 4. Setting MAX_CONCURRENCY to 1 will disable parallel building.

Build flags: --disable-zlib, --disable-jpeg, --disable-tiff, --disable-freetype, --disable-lcms, --disable-webp, --disable-webpmux, --disable-jpeg2000, --disable-imagequant. Disable building the corresponding feature even if the development libraries are present on the building machine.

Build flags: --enable-zlib, --enable-jpeg, --enable-tiff, --enable-freetype, --enable-lcms, --enable-webp, --enable-webpmux, --enable-jpeg2000, --enable-imagequant. Require that the corresponding feature is built. The build will raise an exception if the libraries are not found. Webpmux (WebP metadata) relies on WebP support. Tcl and Tk also must be used together.

Build flag: --disable-platform-guessing. Skips all of the platform dependent guessing of include and library directories for automated build systems that configure the proper paths in the environment variables (e.g. Buildroot).

Build flag: --debug. Adds a debugging flag to the include and library search process to dump all paths searched for and found to stdout.

Sample usage:

$ 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]"
Building on macOS(建立在macOS)

The Xcode command line tools are required to compile portions of Pillow. The tools are installed by running xcode-select --install from the command line. The command line tools are required even if you have the full Xcode package installed. It may be necessary to run sudo xcodebuild -license to accept the license prior to using the tools.

Xcode命令行工具需要编译的部分枕头。安装的工具运行xcode-select——从命令行安装。命令行工具是必需的,即使你有完整的Xcode包安装。可能需要运行sudo xcodebuild许可证之前接受许可使用的工具。

The easiest way to install external libraries is via Homebrew. After you install Homebrew, run:

安装外部库最简单的方法是通过自制程序。你安装自制程序后,运行:

$ brew install libtiff libjpeg webp little-cms2

To install libraqm on macOS use Homebrew to install its dependencies:

安装libraqm macOS使用自制程序来安装它的依赖关系:

$ brew install freetype harfbuzz fribidi

Then see depends/install_raqm_cmake.sh to install libraqm.

然后看depends/install_raqm_cmake.sh。安装libraqm。

Now install Pillow with:

现在安装枕头:

$ pip install Pillow

or from within the uncompressed source directory:

或在未压缩的源目录:

$ python setup.py install
Building on Windows(Windows上)

We don’t recommend trying to build on Windows. It is a maze of twisty passages, mostly dead ends. There are build scripts and notes for the Windows build in the winbuild directory.

我们不建议试图建立在Windows。弯弯曲曲的通道是一个迷宫,大多是死胡同。有构建脚本和笔记的Windows建立winbuild目录。

Building on FreeBSD

Only FreeBSD 10 and 11 tested

只有FreeBSD 10和11测试过

Make sure you have Python’s development libraries installed.:

确保您已经安装了Python的开发库。

$ sudo pkg install python2

Or for Python 3:

$ sudo pkg install python3

Prerequisites are installed on FreeBSD 10 or 11 with:

先决条件是安装在FreeBSD 10或11:

$ sudo pkg install jpeg-turbo tiff webp lcms2 freetype2 openjpeg harfbuzz fribidi

Then see depends/install_raqm_cmake.sh to install libraqm.

然后看depends/install_raqm_cmake.sh。安装libraqm。

Building on Linux

If you didn’t build Python from source, make sure you have Python’s development libraries installed.

如果你没有从源代码构建Python,确保您已经安装了Python的开发库。

In Debian or Ubuntu:

$ sudo apt-get install python-dev python-setuptools

Or for Python 3:

$ sudo apt-get install python3-dev python3-setuptools

In Fedora, the command is:

$ sudo dnf install python-devel redhat-rpm-config

Or for Python 3:

$ sudo dnf install python3-devel redhat-rpm-config

redhat-rpm-config is required on Fedora 23, but not earlier versions.

redhat-rpm-config在Fedora 23是必需的,但不是早期版本。

Prerequisites are installed on Ubuntu 14.04 LTS with:

Ubuntu 14.04 LTS上安装先决条件:

$ sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev \
    libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev \
    tcl8.6-dev tk8.6-dev python-tk

Then see depends/install_raqm.sh to install libraqm.

Prerequisites are installed on recent RedHat Centos or Fedora with:

最近RedHat Centos或Fedora上安装先决条件:

$ sudo dnf install libtiff-devel libjpeg-devel zlib-devel freetype-devel \
    lcms2-devel libwebp-devel tcl-devel tk-devel libraqm-devel \
    libimagequant-devel

Note that the package manager may be yum or dnf, depending on the exact distribution.

注意,包管理器可能是百胜或dnf,取决于具体的分布。

See also the Dockerfiles in the Test Infrastructure repo (https://github.com/python-pillow/docker-images) for a known working install process for other tested distros.

参见测试基础设施中的Dockerfiles回购(https://github.com/python-pillow/docker-images)一个已知的工作为其他测试发行版安装过程。

Building on Android

Basic Android support has been added for compilation within the Termux environment. The dependencies can be installed by:

基本的Android支持Termux中已经添加了编译环境。可以安装的依赖关系:

$ pkg -y install python python-dev ndk-sysroot clang make \
    libjpeg-turbo-dev

这是测试在Termux应用ChromeOS,在x86上。

Platform Support(平台支持)

Current platform support for Pillow. Binary distributions are contributed for each release on a volunteer basis, but the source should compile and run everywhere platform support is listed. In general, we aim to support all current versions of Linux, macOS, and Windows.

当前平台支持库Pillow。二进制发行版提供志愿者的基础上为每一个版本,但源应该编译和运行平台支持上市。一般来说,我们的目标是支持所有当前版本的Linux, macOS和Windows。

  • Continuous Integration Targets(持续集成的目标)

These platforms are built and tested for every change.

这些平台构建和测试每一个变化。

image.png

Mac OS X CI is not run for every commit, but is run for every release.

Mac OS X CI不是运行每一个提交,但每个发布版本都可运行。

Other Platforms

These platforms have been reported to work at the versions mentioned.

这些平台在提到的版本已报告工作。

Contributors please test Pillow on your platform then update this document and send a pull request.

投稿者请测试枕在你的平台上然后更新这个文档和发送一个请求。

image.png
Old Versions

You can download old distributions from the release history at PyPI and by direct URL access eg. https://pypi.org/project/Pillow/1.0/.

您可以下载旧的分布在PyPI释放历史和直接的URL访问。https://pypi.org/project/Pillow/1.0/

附:Handbook手册

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容