1. RGBA 颜色和透明度
>>> from PIL import ImageColor
>>> ImageColor.getcolor('red', 'RGBA')
(255, 0, 0, 255)
>>> ImageColor.getcolor('blue', 'RGBA')
(0, 0, 255, 255)
# 透明度:0 表示透明;255 表示不透明
2. 加载图片,读取图片基本属性
>>> from PIL import Image
>>> im = Image.open(r'e:\path\6.jpg')
>>> im.size
(650, 365)
>>> width, heigth = im.size
>>> width, height = im.size
>>> width, height
(650, 365)
>>> im.filename
'e:\\path\\6.jpg'
>>> im.format
'JPEG'
>>> im.format_description
'JPEG (ISO 10918)'
>>> im.save(r'e:\path\rb.png') # 相当于复制了一份图片并重命名
3. 创建图片
>>> im = Image.new('RGBA', (100,200), 'purple')
>>> im.save(r'e:\path\purple.png')
>>> im = Image.new('RGBA', (100,200))
>>> im.save(r'e:\path\w.png')
4. 裁剪图片
>>> im = Image.open(r'e:\path\rb.png')
# 左上与右下坐标确定一个矩形区域
>>> im.crop((250,20,450,80)).save(r'e:\path\crop.png')
5. 通过粘帖将两张图片进行合成操作
>>> face_im = Image.open(r'e:\path\purple.png')
>>> face = face_im.crop((0,0,20,20)) # 徽章图片大小 20×20
>>> im = open(r'e:\path\rb.png')
>>> im = Image.open(r'e:\path\rb.png')
>>> im.paste(face, (0,0)) # 在图片开始处加上徽章
>>> im.save(r'e:\path\paste.png') # 保存合成的图片
练习:将徽章平铺整个图片
>>> im = Image.open(r'e:\path\paste.png')
>>> width, height = im.size
>>> face_width, face_height = face.size
>>> for left in range(0, width, face_width): # 左坐标点间隔为徽章图片宽度
for top in range(0, height, face_height): # 同理高度间隔为徽章图片高度
im.paste(face_im,(left, top))
>>> im.save(r'e:\path\paste_all.png') # 保存合成图片
6. 调整图片大小
>>> im = Image.open(r'e:\path\crop.png')
>>> width, height = im.size
>>> im_resize = im.resize((int(width/2), int(height/2)))
>>> im_resize.save(r'e:\path\resize.png')
7. 徽章图片加透明度
>>> flag = Image.new('RGBA', (30,30), (0,255,0,100))
>>> im.size
(650, 365)
>>> im.paste(flag, (100,100), flag) # 第三个参数设置透明度
>>> im.save(r'e:\path\pf.png')
8. 旋转图片
>>> im = Image.open(r'e:\path\rb.png')
>>> im.rotate(90).save(r'e:\path\rb_90.png')
>>> im.rotate(180).save(r'e:\path\rb_180.png')
>>> im.rotate(90).resize((365,650)).save(r'e:\path\rbz_90.png')
>>> im.rotate(270, expand=True).save(r'e:\path\rb_270.png') # expand = True 会改变图片大小以适应整个图片
效果:1)rb.png 2) rb_90.png 3) rb_180.png 4) rb_270.png
9. 图片的镜像翻转
>>> im.transpose(Image.FLIP_LEFT_RIGHT).save(r'e:\path\rb_lr.png') #左右翻转
>>> im.transpose(Image.FLIP_TOP_BOTTOM).save(r'e:\path\rb_tb.png') # 上下翻转
10. 图片像素
>>> im = Image.new('RGBA', (100,100))
>>> for x in range(100):
for y in range(50):
im.putpixel((x,y),(210,210,210))
>>> for x in range(100):
for y in range(50,100):
im.putpixel((x,y),ImageColor.getcolor('darkgray','RGBA'))
>>> im.getpixel((50,50))
(169, 169, 169, 255)
>>> im.save(r'e:\path\pixel.png')
11. 画图
>>> im = Image.new('RGBA', (200,200), 'white')
>>> from PIL import ImageDraw
>>> draw = ImageDraw.Draw(im)
>>> draw.line([(0,0),(199,0),(199,199),(0,199),(0,0)], fill='black')
>>> draw.rectangle((20,30,60,60), fill='blue')
>>> draw.ellipse((120,30,160,60),fill='red')
>>> draw.polygon(((57,87),(79,62),(94,85),(120,90),(103,113)),fill='brown')
>>> for i in range(100,200,10):
draw.line([(i,0),(200,i-100)],fill='green')
>>> im.save(r'e:\path\draw.png')
效果图:
12. 绘制文本
>>> from PIL import Image, ImageDraw, ImageFont
>>> im = Image.new('RGBA', (200,200), 'white') # 200×200 白色画布
>>> draw = ImageDraw.Draw(im)
>>> draw.text((20,150),'Hello',fill='purple') # 在坐标点(20,150)处绘制文本,颜色为紫色
>>> font = ImageFont.truetype(r'c:\Windows\Fonts\Gabriola.ttf',32) # 字体,Windows字体库中任意一字体均可,字体大小32
>>> draw.text((100,150), 'howdy', fill='gray', font=font) # 使用字体绘制文本
>>> im.save(r'e:\path\text.png')
效果图:
13. 动态图 gif
import os
from PIL import Image
# 解析gif
os.chdir(os.path.join('E:\\','path'))
# os.makedirs('gif',exist_ok=True)
# im=Image.open('earth.gif')
# try:
# i=1
# while True:
# im.seek(im.tell())
# new_image=Image.new('RGBA',im.size,'white')
# new_image.paste(im)
# new_image.save('gif/%s.png'% i)
# i+=1
# im.seek(im.tell()+1)
# except EOFError:
# pass
# 合成gif
im=Image.open('gif/1.png')
# im=Image.new('RGBA',im_1.size,'black') # 避免开始和每次循环时出现此图片帧
image_list=[]
for i in range(1,len(os.listdir('gif'))+1): # 按顺序添加
image_list.append(Image.open('gif/%s.png'% i))
im.save('newgif.gif',save_all=True,append_images=image_list,duration=200,loop=0,disposal=0)
官网实例:
from PIL import Image
im = Image.open("animation.gif")
im.seek(1) # skip to the second frame
try:
while 1:
im.seek(im.tell()+1)
# do something to im
except EOFError:
pass # end of sequence