在引出问题之前,先来了解一下PIL的基本使用
基础的Image Moudule
基本用法
1 | from PIL import Image |
Create thumbnails(缩略图)
1
2
3
4
5
6
7
8
9
10
11
12from PIL import Image
import glob
import os
size = 128, 128
# The following script creates nice 128x128 thumbnails of all JPEG images in the current directory.
for infile in glob.glob("*.jpg"):
file, ext = os.path.splitext(infile)
im = Image.open(infile)
im.thumbnail(size)
im.save(file + "thumbnail", "JPEG")给图片加水印
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from PIL import Image, ImageDraw,ImageFont
# convert()进行图像格式的转变
# PIL中有九种不同模式。分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
im = Image.open("d:/pic/kebi1.jpg").convert('RGBA')
# 新建一个Image
txt=Image.new('RGBA', im.size, (0,0,0,0))
fnt=ImageFont.truetype("c:/Windows/fonts/Tahoma.ttf", 20)
d=ImageDraw.Draw(txt)
d.text((txt.size[0]-80,txt.size[1]-30), "IWTF",font=fnt, fill=(255,255,255,255))
# 图片合成
# 要求: 1. 图像格式为RGBA
# 2. 两个图像要大小相同
out=Image.alpha_composite(im, txt)
out.show()对于PNG、BMP和JPG彩色图像格式之间的互相转换都可以通过Image模块的open()和save()函数来完成。
对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”。
PIL.Image.composite(image1, image2, mask)
类似于blend,alpha_composite。这里使用了mask遮罩
- 条件:大小一样,mask图片mode为1,L,RGBA
- 作用:Create composite image by blending images using a transparency mask.
网上常见的教程
1 | out = image1 * (1.0 - alpha) + image2 * alpha |
问题
使用blend(混合)需要两张图片具有
相同的格式
&&相同的大小
有没有什么更好的方法来实现(限制条件更少)
思路
通过加小图到一个背景透明的大图上即可;然后将大图合成即可
其他常用图片操作
改变图片透明度
1
2
3
4
5
6
7
8
9
10
11def changeAlpha(im, alpha):
im = im.convert("RGBA")
x, y = im.size
for i in range(x):
for j in range(y):
color = im.getpixel((i, j))
color = color[:-1] + (alpha, )
im.putpixel((i, j), color)
im.save("out.PNG")
【参考文献】