文/江红  本文来源《Python程序设计与算法基础教程(第2版)-微课版》

本案例通过使用Python图像处理库Pillow,帮助读者进一步了解Python的基本概念:模块、对象、方法和函数的使用。可以对应于教程正文的第2章。使用Python语言解决实际问题时,往往需要使用由第三方开发的开源Python软件库。本案例使用图像处理库Pillow中的模块、对象来处理图像:实现读取图像、获取图像信息、调整图像大小、旋转图像、平滑图像、剪切图像等基本图像处理任务。

CS2.1 安装Pillow

Pillow是Python中的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。Pillow位于Python包索引(PyPI)中,可以使用pip来安装。注意,Anaconda包含了Pillow库。【例CS.6使用pip安装Pillow库。以管理员身份运行命令行提示符,输入命令:pip3 installPillow,安装Pillow库。如图CS-19所示。

图CS-19  使用pip安装Pillow库

CS2.2 打开和显示图像

Pillow库包含几十个模块,组织在名为PIL的包中。PIL包中的一个模块是Image。PIL.Image提供了一些包括从文件中加载图像和创建新图像的函数,其中的Image用于表示图像对象。【例CS.7】打开和显示图像。使用PIL.Image模块的open()函数可以打开一个图像,返回一个图像对象,然后调用图像对象的show()方法,可以在屏幕上显示图像。

>>> importPIL; from PIL import Image

>>> im= PIL.Image.open("c:/pythonpa/cs/img/mandrill.jpg")

>>>im.show()

>>>print(im.format, im.size, im.mode) #显示图像的格式、大小和模式信息

JPEG (298, 298)RGB

说明:(1)im.format返回包含图像格式的字符串(JPEG、GIF、TIFF、BMP、PNG、…)。(2)im.size返回包含图像宽度和高度的元组,单位为像素。与每个像素相关的是一对坐标(i, j),用于标识像素的列i和行j。列从左到右编号,从0开始;行从上到下编号,也从0开始。(3)im.mode返回包含图像模式的字符串(RGB、CYMK、Grayscale、…)。

CS2.3 图像的基本操作

图像对象的copy()方法用于拷贝图像;crop()方法用于剪裁图像;paste()方法用于将一个图像粘贴(覆盖)在另一个图像上面;resize()方法用于调整图像大小;rotate()方法用于旋转和翻转图像;filter()方法用于图像过滤。Pillow提供的图像处理工具包括其它众多模块。有关Pillow的更多信息,请查阅在线文档http://pillow.readthedocs.org。使用PIL.Image模块中的函数new(),可以创建一个给定模式和大小的新图像对象。例如,创建一个新的大小为800×600的RGB图像的代码如下:

>>> im2= PIL.Image.new('RGB', (800,600))

【例CS.8】图像的基本操作示例。把一幅图像的4个副本排列成2×2网格:在左上方的副本是原始图像,而画面右上方、左下方、右下方则分别使用模块PIL.ImageFilter中定义的内置过滤器CONTOUR、EMBOSS、FIND_EDGES进行过滤。

#模块:c:\pythonpa\cs\image_test.py

#命令行:python image_test.py c:\pythonpa\cs\img\mandrill.jpg

#功能:把c:\pythonpa\cs\img\mandrill.jpg的4个副本排列成2×2网格并显示

import sys

import os

import PIL.Image

import PIL.ImageFilter

im = PIL.Image.open(sys.argv[1])

width, height = im.size

# 创建新图像,大小为原始图像的4倍

res = PIL.Image.new(im.mode, (2*width,2*height))

# 把原始图像放置在左上角

res.paste(im, (0, 0, width, height))

# 把轮廓过滤CONTOUR的图像放置在右上角

contour =im.filter(PIL.ImageFilter.CONTOUR)

res.paste(contour, (width, 0, 2*width,height))

# 把浮雕过滤EMBOSS的图像放置在左下角

emboss = im.filter(PIL.ImageFilter.EMBOSS)

res.paste(emboss, (0, height, width,2*height))

# 把边缘过滤FIND_EDGES的图像放置在右下角

edges =im.filter(PIL.ImageFilter.FIND_EDGES)

res.paste(edges, (width, height, 2*width,2*height))

# 显示结果图像

res.show()

CS2.4 批量图像格式转换

使用PIL.Image模块的open()函数打开磁盘图像文件时,会根据文件内容自动确定文件格式。使用Image对象的save()方法保存图像时,可以指定格式,从而实现格式转换。【例CS.9】批量图像格式转换。

#模块:c:\pythonpa\cs\image_convert.py

#命令行:python image_convert.py c:\pythonpa\cs\img jpg png

#功能:把c:\pythonpa\cs\img下的所有jpg文件转换为png文件

import sys

import glob

import os

import PIL.Image

img_path = sys.argv[1] + "/*." +sys.argv[2]

for infile in glob.glob(img_path):

f,e = os.path.splitext(infile)

outfile = f + "." + sys.argv[3]

PIL.Image.open(infile).save(outfile)

说明:(1)glob模块可以使用通配符匹配文件名。例如,glob.glob("c:\tmp\*.jpg"),可以返回c:\tmp下的所有后缀为jpg的文件列表。(2)os.path.splitext(p)可以拆分文件名和后缀。

CS2.5 批量创建缩略图

缩略图是网络开发或图像软件预览常用的一种基本技术,使用Python的Pillow图像库中Image模块中的Image对象的thumbnail()方法,可以很方便地建立缩略图。【例CS.10】批量创建缩略图。

#模块:c:\pythonpa\cs\ image_thumbnail.py

#命令行:python image_thumbnail.py c:\pythonpa\cs\img jpg

#功能:把c:\pythonpa\cs\img下的所有*.jpg文件转换为*_s.jpg缩略图

import sys

import os

import glob

import PIL.Image

img_path = sys.argv[1] + "/*." +sys.argv[2]

size = (128,128)

for infile in glob.glob(img_path):

f,e = os.path.splitext(infile)

outfile = f + "_s." + sys.argv[2]

img = PIL.Image.open(infile)

img.thumbnail(size, PIL.Image.ANTIALIAS)

img.save(outfile)

说明:(1)glob模块可以使用通配符匹配文件名。例如,glob.glob("c:\tmp\*.jpg"),可以返回c:/tmp下的所有后缀为jpg的文件列表。(2)os.path.splitext(p)可以拆分文件名和后缀。

CS2.6 批量图像加文字水印

图片加水印是防止盗版的有效方式之一。首先使用Python的Pillow图像库中的Image模块的new函数可以创建水印图像对象,并使用ImageDraw模块在水印图像上绘制文字,最后通过Image模块的composite函数合成水印图像和原图像。【例CS.11】批量图像加文字水印。

#模块:c:\pythonpa\cs\image_watermark1.py

#命令行:python image_watermark1.py c:\pythonpa\cs\img jpg"Python"

#功能:把c:\pythonpa\cs\img下的所有*.jpg文件加"Python"水印并另存为*_w.jpg

import sys

import os

import glob

from PIL import Image, ImageDraw, ImageFont

img_path = sys.argv[1] + "/*." +sys.argv[2]

img_suffix = sys.argv[2]

txt_log = sys.argv[3]

for infile in glob.glob(img_path):

f, e = os.path.splitext(infile)

outfile = f + "_w." + img_suffix

im = Image.open(infile)

im_log = Image.new('RGBA', im.size)

fnt = ImageFont.truetype("c:/Windows/fonts/Tahoma.ttf", 20)

d= ImageDraw.ImageDraw(im_log)

d.text((0, 0), txt_log, font = fnt)

im_out = Image.composite(im_log, im, im_log)

im_out.save(outfile)

CS2.7 批量图像加图片水印

加图片水印的原理和加文字水印相同,首先使用Python的Pillow图像库中的Image模块的new函数可以创建水印图像对象,并使用图像对象的paste方法把log图像粘贴到水印图像,最后通过Image模块的composite函数合成水印图像和原图像。【例CS.12】批量图像加图片水印。

#模块:c:\pythonpa\cs\image_watermark2.py

#命令行:python image_watermark2.py c:\pythonpa\cs\img jpg c:\pythonpa\cs\img\python-logo.png

#功能:把c:\pythonpa\cs\img下的所有*.jpg文件加水印python-logo.png并另存为*_w.jpg

import sys

import os

import glob

from PIL import Image, ImageDraw, ImageFont

img_path = sys.argv[1] + "/*." +sys.argv[2]

img_suffix = sys.argv[2]

log_file = sys.argv[3]

for infile in glob.glob(img_path):

f, e = os.path.splitext(infile)

outfile = f + "_w." + img_suffix

im = Image.open(infile)

im_log = Image.open(log_file)

im_mark = Image.new('RGBA', im.size)

im_mark.paste(im_log, (0, 0))

im_out = Image.composite(im_mark, im, im_mark)

im_out.save(outfile)

CS2.8 批量调整图像大小

调整图像大小也是网络开发或图像软件预览常用的一种基本技术。使用Image对象的resize()方法可以调整图像大小。【例CS.13】批量调整图像大小。

#模块:c:\pythonpa\cs\image_resize.py

#命令行:python image_resize.py c:\pythonpa\cs\img jpg 640 480

#功能:把c:\pythonpa\cs\img下的所有*.jpg文件大小调整为640*480并另存为*_640.jpg

import sys

import os

import glob

import PIL.Image

img_path = sys.argv[1] + "/*." +sys.argv[2]

img_suffix = sys.argv[2]

img_size_width = int(sys.argv[3])

img_size_height = int(sys.argv[4])

for infile in glob.glob(img_path):

f, e = os.path.splitext(infile)

outfile = f + "_" + str(img_size_width) + "." +img_suffix

im = PIL.Image.open(infile)

im_out = im.resize((img_size_width, img_size_height))

im_out.save(outfile)

500分钟教学视频提供教学课件,多学时教学大纲,电子教案,程序源码,期末试卷,习题答案本书集教材、练习册、上机指导于一体,基于Windows 10和Python 3.7构建Python开发平台,阐述Python语言的基础知识,以及使用Python语言的开发应用实例,具体内容包括Python概述,Python语言基础,程序流程控制,常用内置数据类型,序列数据类型,输入和输出,错误和异常处理,函数、类和对象,模块和客户端,算法与数据结构基础,图形用户界面,图形绘制,数值日期和时间处理,字符串和文本处理,文件、数据库访问,网络和Web编程,多线程编程以及系统管理等。点击【Python程序设计课程教与学(54、72、80学时教学大纲)】,查看本书教学大纲

-----更多的Python案例教程,点击【】----

pil对图像加透明 python_使用Python图像处理库Pillow处理图像文件相关推荐

  1. pil对图像加透明 python_关于python:如何使用PIL将透明png图像与另一个图像合并...

    我有一个透明的png图像"foo.png" 我打开了另一张图片 im = Image.open("foo2.png"); 现在我需要的是将foo.png与foo ...

  2. pillow是python的图像处理标准库_详解Python图像处理库Pillow常用使用方法

    pil(python image library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:pil. pil ...

  3. pillow属于python标准库吗_详解Python图像处理库Pillow常用使用方法

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:PIL. PIL ...

  4. nodejs 图片处理模块 rotate_学会Pillow再也不用PS啦——Python图像处理库Pillow入门!...

    你在用什么软件进行图像处理呢?厌倦了鼠标和手指的拖拖点点,想不想用程序和代码进行图像的高效处理,Python作为简单高效又很强大的一门编程语言,对于图像的处理自然也是轻松拿下,听起来是不是很酷很极客, ...

  5. Python图像处理库Pillow(PIL)的简单使用

    一.PIL和Pillow图像处理库 图像库PIL(Python Image Library)是Python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像 ...

  6. 简单实用的Python图像处理库Pillow

    Pillow图像处理 Pillow 库的安装 图象处理基本知识 图像的RGB 色彩模式 像素阵列 Image 模块 打开和新建 混合 透明度混合处理 遮罩混合处理 复制和缩放 复制图像 缩放像素 缩放 ...

  7. python基础教程:Python图像处理库PIL中图像格式转换的实现

    这篇文章主要介绍了Python图像处理库PIL中图像格式转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 在数字图像处理 ...

  8. Python图像处理库PIL中图像格式转换(一)

    参考:https://blog.csdn.net/icamera0/article/details/50843172 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我 ...

  9. Python图像处理库PIL中图像格式转换

    在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL来实 ...

最新文章

  1. 我的matlab5个车牌_顶帽_底帽_边缘_腐蚀
  2. Robotics Research Laboratory
  3. Apache Kafka-Spring Kafka生产消费@KafkaListener源码解析
  4. Selenium WebDriver的TestNG注释完整指南
  5. php中用for循环制作矩形,PHP中for循环语句的几种变型
  6. 三人小组关系c语言编程,理性分析一下c-block三人组的实力
  7. c# 跨线程访问窗体UI
  8. mysql三高讲解(一):1.2 一个sql语句的执行过程
  9. IOS学习笔记07---C语言函数-printf函数
  10. ubuntu下命令行设置壁纸
  11. 10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写
  12. python爬关键词百度指数_Python爬虫爬取百度指数的关键词搜索指数教程
  13. 创建 VSTO 工作簿的 ClickOnce 安装包
  14. 2019ug最新版本是多少_UGNX将在2019年隆重发布最新版本,也是最后一个版本,让你我都想不到的是..........
  15. 获取苹果设备的UDID
  16. telegram 语音通话语音呼叫一直连接中
  17. 每日一练蓝桥杯C语言:暴力枚举
  18. 挖到这个高危SSRF漏洞,我和我的小伙伴们都惊呆了!
  19. 基于Zxing的二维码生成和二维码扫描
  20. 火伞云全球节点分布国家及城市列表

热门文章

  1. vue-cli 引用elementUI打包后文件过大
  2. 项目私活 【抢小米手机软件】可以做的朋友,可以联系社区
  3. mysql中json_extract函数的使用?作用是什么?
  4. iOS NSURLSession DataTask(数据任务)
  5. spring cloud + spring boot + springmvc+mybatis分布式微服务云架构
  6. 【cocos2d-x从c++到js】14:注册函数
  7. 在开发环境中,自己搭建一个ssl环境(小例子)
  8. linux学习之lvm-逻辑卷管理器
  9. cpu,内存和disk使用报警脚本
  10. [跟我学中小企业架构部署]之一:整体架构设计