代码:
# -*- coding: utf-8 -*-
# 顾清宇(Ainley)
# python 3.7.4
from __future__ import print_function
from PIL import Image
# 给图片右下角加国旗,欢迎国庆,喜庆70周年
class redFlag:
def Add(self):
# 打开国旗图片
imgRedFlag = Image.open("RedFlag.jpg")
imgRedFlag = imgRedFlag.convert('RGBA')
# 打开原来的微信头像
imgOld = Image.open('old.jpg')
imgOld = imgOld.convert('RGBA')
# 判断图片大小,统一改成700*700
if imgOld.size != (640, 640):
size = (640,640)
imgOld.thumbnail(size)
if imgRedFlag.size != (200, 133):
size = (200, 133)
imgRedFlag.thumbnail(size)
# 将国旗图片粘贴到原微信头像
imgOld.paste(imgRedFlag, (440, 507, 640, 640))
imgOld.show()
imgOld.save('new.png')
img = redFlag()
img.Add()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
其中有一些我在修改代码,玩的过程中发现了几个问题,分别是:
pip install PIL时失败,报错No matching distribution found for PIL
背景介绍:PIL(Python Imaging Library)是python的一个强大方便的图像处理库,但是它只支持到python2.7,而我使用的是python3.7.4,所以我pip install PIL失败。
那么,怎么解决呢?我再介绍一个库,Pillow。Pillow是PIL的一个派生分支,但是如今已经发展成为比PIL本身更具有活力的图像处理库了。所以解决方案就是,命令行输入pip install Pillow,就可以了,安装了Pillow之后,代码不需要改变,使用from PIL import Image,就可以引用该库来使用了。
在代码全部完成时,前面那个朋友并没有提供国旗图片,所以自己去找了一些,尺寸需要调整,不同的人,他的头像图片尺寸也不一样,也是需要更改
大家可以看到的是,其实我的那个国旗不是微信官方的那种。因为前面那个朋友并没有提供国旗的图片,他放在网盘里面了,而我又不想麻烦去下载,所以就自己去找了一张国旗的图片,那图片尺寸的问题必然是不对的,所以需要更改,改图片尺寸的函数是,thumbnail(),在下面我会介绍一下。
代码中修改图片尺寸的thumbnail()函数的一些问题(缩略图+原比例不变)
在这个函数里面我玩了很久,一开始不知道它的一些特性,只知道它是可以修改图片尺寸,我就各种尝试,然后各种运行程序报错,搞了得有半个小时吧,想要摸清它,后来我去网上搜了一下,发现网上就有介绍它的文章……
所以建议大家哦,以后想搞懂一个函数的具体作用,最方便那就是上网搜,前辈已经为我们总结好了,当然如果想自己摸索加深印象,当然也是OK的啦!
那我就在这里再简单总结一下,thumbnail()函数生成缩略图,注意是缩略图,所以你生成的图像尺寸应该比原图小。它接受一个元组作为参数,分别对应着缩略图的宽高,在缩略时,函数会保持图片的宽高比例。
如果你原图尺寸小于给定参数,那就不是缩略图了,那么这个函数将不起作用;如果你参数宽高和原图像宽高比不同,则会根据j较大对应边进行原比例缩放。举个例子:一张图片为300 X 420大小,当参数为(200,200)时,生成的缩略图大小为142 X 200。(我这里用了大写X,而没有用*,是因为,两个星号之间自动就斜体显示了,没用过csdn写博客的朋友可能看不懂,没关系,略过~)
第3条的原因导致下面的im.paste()函数报错images do not match
我发现im.paste()这个函数极其傲娇,这个网上有很多文章讲它,具体的我就不说了,它有好几种重载方式:
im.paste( image, box ); im.paste( colour, box ); im.paste( image, box, mask ); im.paste( colour, box, mask );其中那个第二个参数box是存放一个元组,用来表示第二张图片在第一张图片上的位置,它不能有一点差错,必须很精确它才可以,否则它就罢工,它就报错images do not match,不过如果你给的足够精确,它还是很听话的,比你女朋友还听话???女朋友一般会听话吗?没女朋友的我不知道诶(手动狗头保命!)。https://www.elktara.com
保存图片时,要保存为png格式
如果保存成jpg格式,它会报错cannot write mode RGBA as JPEG,我们前面有定义im.convert(“RGBA”),所以可能这就是PNG和JPEG的一个区别吧,总之保存成png格式的图片就可以了。
共同学习,写下你的评论
评论加载中...
作者其他优质文章