厦门企业网站开发公司,网站开发学习方法,上传网站教程,网站开发大数据库本案例通过使用Python图像处理库Pillow#xff0c;帮助大家进一步了解Python的基本概念#xff1a;模块、对象、方法和函数的使用
使用Python语言解决实际问题时#xff0c;往往需要使用由第三方开发的开源Python软件库。
本案例使用图像处理库Pillow中的模块、对象来处理…
本案例通过使用Python图像处理库Pillow帮助大家进一步了解Python的基本概念模块、对象、方法和函数的使用
使用Python语言解决实际问题时往往需要使用由第三方开发的开源Python软件库。
本案例使用图像处理库Pillow中的模块、对象来处理图像实现读取图像、获取图像信息、调整图像大小、旋转图像、平滑图像、剪切图像等基本图像处理任务。 01、安装Pillow
Pillow是Python中的图像处理库PILPython Image Library提供了了广泛的文件格式支持强大的图像处理能力主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。
Pillow位于Python包索引PyPI中可以使用pip来安装。注意Anaconda包含了Pillow库。
【例1】使用pip安装Pillow库。
以管理员身份运行命令行提示符输入命令pip3 install Pillow安装Pillow库。如图1所示。 ■ 图1 使用pip安装Pillow库 02、打开和显示图像
Pillow库包含几十个模块组织在名为PIL的包中。PIL包中的一个模块是Image。PIL.Image提供了一些包括从文件中加载图像和创建新图像的函数其中的Image用于表示图像对象。
【例2】打开和显示图像。
使用PIL.Image模块的open()函数可以打开一个图像返回一个图像对象然后调用图像对象的show()方法可以在屏幕上显示图像。 import PIL; from PIL import Imageim PIL.Image.open(c:/pythonpa/cs/img/mandrill.jpg)im.show()print(im.format, im.size, im.mode) #显示图像的格式、大小和模式信息
JPEG (298, 298) RGB 说明/ 1im.format返回包含图像格式的字符串JPEG、GIF、TIFF、BMP、PNG、…。 2im.size返回包含图像宽度和高度的元组单位为像素。与每个像素相关的是一对坐标(i, j)用于标识像素的列i和行j。列从左到右编号从0开始行从上到下编号也从0开始。 3im.mode返回包含图像模式的字符串RGB、CYMK、Grayscale、…。 03、图像的基本操作
图像对象的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))
【例3】图像的基本操作示例。
把一幅图像的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()
04、批量图像格式转换
使用PIL.Image模块的open()函数打开磁盘图像文件时会根据文件内容自动确定文件格式。使用Image对象的save()方法保存图像时可以指定格式从而实现格式转换。
【例4】批量图像格式转换。
#模块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)说明/ 1glob模块可以使用通配符匹配文件名。例如glob.glob(c:\tmp\*.jpg)可以返回c:\tmp下的所有后缀为jpg的文件列表。 2os.path.splitext(p)可以拆分文件名和后缀。 05、批量创建缩略图
缩略图是网络开发或图像软件预览常用的一种基本技术使用Python的Pillow图像库中Image模块中的Image对象的thumbnail()方法可以很方便地建立缩略图。
【例5】批量创建缩略图。
#模块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) 说明/ 1glob模块可以使用通配符匹配文件名。例如glob.glob(c:\tmp\*.jpg)可以返回c:/tmp下的所有后缀为jpg的文件列表。 2os.path.splitext(p)可以拆分文件名和后缀。 06、批量图像加文字水印
图片加水印是防止盗版的有效方式之一。首先使用Python的Pillow图像库中的Image模块的new函数可以创建水印图像对象并使用ImageDraw模块在水印图像上绘制文字最后通过Image模块的composite函数合成水印图像和原图像。
【例6】批量图像加文字水印。
#模块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_suffixim 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)
07、批量图像加图片水印
加图片水印的原理和加文字水印相同首先使用Python的Pillow图像库中的Image模块的new函数可以创建水印图像对象并使用图像对象的paste方法把log图像粘贴到水印图像最后通过Image模块的composite函数合成水印图像和原图像。
【例7】批量图像加图片水印。
#模块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_suffixim 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) 08、批量调整图像大小
调整图像大小也是网络开发或图像软件预览常用的一种基本技术。使用Image对象的resize()方法可以调整图像大小。
【例8】批量调整图像大小。
#模块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_suffixim PIL.Image.open(infile)im_out im.resize((img_size_width, img_size_height))im_out.save(outfile)