Pillow库是一个Python的第三方库。
在Python2中,PIL(Python Imaging Library)是一个非常好用的图像处理库,但PIL不支持Python3,所以有人(Alex Clark和Contributors)提供了Pillow,可以在Python3中使用。
官方文档路径:https://pillow.readthedocs.io/en/latest/
一、安装Pillow
pip install pillow
Pillow库安装成功后,导包时要用PIL来导入,而不能用pillow或Pillow。
import PIL from PIL import Image
在Pillow库中,有二十多个模块,还支持非常多的插件。其中最常用的是Image模块中同名的Image类,其他很多模块都是在Image模块的基础上对图像做进一步的特殊处理。本文主要介绍Image模块的常用用法,其他的模块可以按需看文档。
二、打开本地图片
# coding=utf-8 from PIL import Image image = Image.open("yazi.jpg") image.show()
运行结果:
open(fp, mode='r'): 打开一张图片,如果图片与当前代码在同一目录下,可以只写图片的文件名,其他情况需要拼接图片的路径。mode默认为'r',也必须为'r'。
show(): 调用图片显示软件打开图片。打开后程序会阻塞,需要手动关闭。
三、创建一张新图片
from PIL import Image image = Image.new('RGB', (160, 90), (0, 0, 255)) image.show()
运行结果:
new(mode, size, color=0): 创建一张图片(画布),用于绘图,有3个参数。
mode, 图片的模式,如“RGB”(red,green,blue三原色的缩写,表示真彩色图像)、“L”(灰度,黑白图像)等。
size, 图片的大小。是一个长度为2的元组(width, height),表示的是像素大小。
color, 图片的颜色,默认值为0表示黑色。可以传入长度为3的元组表示颜色,也可以传入颜色的十六进制,在版本1.1.4后,还可以直接传入颜色的英文单词,如上面代码中的(0, 0, 255)可以换成‘#0000FF'或‘blue',都是表示蓝色。
四、Image模块的常用属性
from PIL import Image image = Image.open("yazi.jpg") print('width: ', image.width) print('height: ', image.height) print('size: ', image.size) print('mode: ', image.mode) print('format: ', image.format) print('category: ', image.category) print('readonly: ', image.readonly) print('info: ', image.info)
运行结果:
width:"htmlcode">
from PIL import Image image = Image.open("yazi.jpg") print(image.mode) image1 = image.convert('1') print(image1.mode) # image1.show() image_l = image.convert('L') print(image_l.mode) # image_l.show() image_p = image.convert('P') print(image_p.mode) image_p.show()运行结果:
RGBA
1
L
convert(self, mode=None, matrix=None, dither=None, palette=WEB, colors=256):"htmlcode">
from PIL import Image image = Image.open("yazi.jpg") image_rgb = image.convert('RGB') print(image_rgb.mode) image_l = image_rgb.convert('L') image_l.show() matrix = (0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6) image_l2 = image_rgb.convert('L', matrix=matrix) image_l2.show()运行结果:
上面的代码中,给matrix参数传入了一个长度为12的元组,matrix的值改变了转换的效果,变化程度取决于传入的元组中浮点数的值。注意,有些模式是不支持的,如'RGBA',且传入的元组长度必须为4或12,否则报错。
2.2 palette参数的效果对比
from PIL import Image image = Image.open("yazi.jpg") image_p = image.convert('P') # image_l.show() image_p2 = image.convert('P', palette='ADAPTIVE', colors=256) image_p2.show()运行结果:
上面的代码中,将palette参数改为了'ADAPTIVE',图片的差异不大,不过,如果将colors变小差异会比较大,但那样会将图片效果变差。
六、图片拷贝粘贴和保存
from PIL import Image image = Image.open("yazi.jpg") image_copy = image.copy() # image_copy.show() image_new = Image.new('RGB', (160, 90), (0, 0, 255)) image_new2 = Image.new('L', (160, 90), '#646464') image_copy.paste(image_new, (100, 100, 260, 190), mask=image_new2) image_copy.save('duck.jpg') image_save = Image.open('duck.jpg') print(image_save.format, image_save.mode) image_copy.show()运行结果:
jpg RGBA
copy(): 拷贝当前的图片,拷贝出来的图片与原图一模一样。如果想在图片上粘贴一些内容,又想保留原图时,可以使用此方法。
paste(im, box=None, mask=None): 将另一张图片粘贴到当前图片中,如果粘贴的模式不匹配,则将被粘贴图片的模式转换成当前图片的模式。有3个参数。
im, 被粘贴的图片。传入一张图片,当第二个参数box指定的是一个区域时,im参数也可以是一个整数或颜色值(元组表示,16进制表示和颜色名都可以,如上面代码中的image_new可以换成(0, 0, 255), '#0000FF',"htmlcode">
from PIL import Image image = Image.open("yazi.jpg") image_crop = image.crop(box=(300, 300, 800, 700)) # image_crop.show() print('before resize: ', image.size) image_resize = image.resize((500, 400), resample=Image.LANCZOS, box=(100, 100, 1200, 800), reducing_gap=5.0) print('after resize: ', image_resize.size) image_resize.show()运行结果:
before resize:"_moz" />
crop(box=None): 裁剪图片,返回裁剪区域的图片。box表示裁剪的区域,传入长度为4的元组(x1, y1, x2, y2),不传默认为拷贝原图,相当于copy()方法,如果裁剪的区域超过了原图的区域,超出部分用像素格填充。
resize(size, resample=BICUBIC, box=None, reducing_gap=None): 缩放图片,返回缩放后的图片。有4个参数。
size, 图片缩放后的尺寸,传入一个长度为2的元组(width, height)。
resample, 重采样,是一个可选的重采样过滤器。可以传入Image.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING, Image.BICUBIC, Image.LANCZOS。默认过滤器为Image.BICUBIC。如果图像的模式为'1'或'P',则始终设置为Image.NEAREST。
box, 缩放图片的区域。传入长度为4的元组(x1, y1, x2, y2),这个区域必须在原图的(0, 0, width, height)范围内,如果超出范围会报错,如果不传值则默认将整张原图进行缩放。
reducing_gap, 减少间隙。传入一个浮点数,用于优化图片缩放效果,默认不进行优化,值大于3.0时优化效果基本已经是公平的重采样。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】