PIL:是Python Image Library的缩写,图像处理的模块。Image,ImageFont,ImageDraw,ImageFilter

Image模块:

常用方法:

open()  #打开图片

new(mode,size,color)   #创建一张空白图片

save("test.gif","GIF")   #保存(新图片路径和名称,保存格式)

size()   #获取图片大小

thumbnail(weight,high)   #缩放图片大小(宽,高)

show()    #显示图片

blend(img1,img2,alpha)   #两张图片相加,alpha表示img1和img2的比例参数。

crop()   #剪切,提取某个矩阵大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。

rotate(45)    #逆时针旋转45度

transpose()    #旋转图像
transpose(Image.FLIP_LEFT_RIGHT) #左右对换。
transpose(Image.FLIP_TOP_BOTTOM) #上下对换。
transpose(Image.ROTATE_90) #旋转 90 度角。
transpose(Image.ROTATE_180) #旋转 180 度角。
transpose(Image.ROTATE_270) #旋转 270 度角。 paste(im,box)#粘贴box大小的im到原先的图片对象中。 convert() #用来将图像转换为不同色彩模式。 filters() #滤镜
BLUR #虚化
EMBOSS
resize((128,128)) #resize成128*128像素大小 convert("RGBA") #图形类型转换 getpixel((4,4)) #获取某个像素位置的值 putpixel((4,4),(255,0,0)) #写入某个像素位置的值

实例:

import Image,ImageFilter

im = Image.open("E:\\QQ2.jpg")   #打开图片
w,h = im.size #获取图片的像素,其值为象素意义上的宽和高
print(im.format) #获取图片格式
print(im.size) #获取图片像素
im.thumbnail((w//2,h//2)) #缩放图片大小为原来的一半
im.save("E:\\QQ_backup.jpg",'jpeg') #保存图片,以及保存格式为jpeg
#im.show() #显示图片
print(im.mode) #显示模式。 RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。
box = (100,100,200,200)
s = im.crop(box) #图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。
#s.show()
#s = s.transpose(Image.ROTATE_180) #旋转180°
#im.paste(s,box) #粘贴
#im.show() im = Image.open("E:\\QQ2.jpg")
im2 = im.filter(ImageFilter.EMBOSS)
im2.save("E:\\QQ_2.jpg",'jpeg')
#im2.show() newImg = Image.new("RGBA",(640,480),(0,255,0)) #创建一张大小为640*480颜色为绿色的图片
newImg.save("E:\\newImg.png","PNG")

输出结果为:

JPEG
(640, 640)
RGB

ImageFont模块:存储bitmap字体,用于ImageDraw类的text()方法。

常用方法:

load()    #从指定的文件中加载一种字体,该函数返回对应的字体对象。如果该函数失败,将产生IOError异常。

load_path()   #和函数load()一样,但是如果没有指定当前路径的话,会从sys.path开始查找指定的字体文件。

truetype("C:\\Windows\\Fonts\\Arial.ttf", 18)   #加载字体对象,并且为指定字体的大小。

load_default()   #加载一个默认字体

getsize()   #返回给定文本的宽度和高度

getmask()   #为给定的文本返回一个位图.如果字体使用了抗锯齿,位图的模式为“L”,且其最大值为255。否则,它的模式为“1”。

ImageDraw模块:

常用方法:

(1)ImageDraw.Draw()   #对所有使用ImageDraw操作的图片,要进行对象的创建。

import ImageDraw

t = Image.new('RGB',(640,480),'blue')   #创建一张新图片
d = ImageDraw.Draw(t) #创建一个可操作对象
(2)t.line([xi,yi,x2,y2],options)   #以x1,y1为起点,x2,y2为终点画一条直线,也可以写成(x1,y1,x2,y2)或[(x1,y1),(x2,y2)]。options选项包含的fill选项规定直线的颜色。

import ImageDraw
import Image t = Image.new('RGB',(700,700),'yellow')
d = ImageDraw.Draw(t) d.line([100,100,100,600],fill=10)
d.line((100,100,600,100),fill='red')
d.line((600,100,600,600),fill='black')
d.line([(100,600),600,600],fill='blue')
t.show()
(3)d.arc([x1,y1,x2,y2],startAngle,endAngle,options)    #在左上角坐标为x1,y1,右下角坐标为x2,y2的矩形区域内满圆,以startAngle为起始角度,endAngle为终点角度,截取圆的一部分圆弧。如果x1,y1,xw,y2不是正方形,则在该区域内的最大椭圆中根据角度截取片段。

d.arc((100,100,600,600),0,90,fill='red')   #画一个上半圆弧
d.arc((100,100,600,400),90,270,fill='blue') #画一个右半椭圆
(4)d.ellipse([x1,y1,x2,y2],options)   #用法同arc,用于画圆(或者椭圆)。Options选项中fill表示将圆(或者椭圆)用指定颜色填满,outlie表示只规定圆的颜色。

d.ellipse((100,100,600,600),outline=128)  #画一个圆
d.ellipse((100,250,600,450),fill='blue') #在圆里画一个椭圆
(5)d.chord([x1,y1,x2,y2],startAngle,endAngle,options)   #用法与arc相同,用来画圆从startAngle到endAngle的弦。Options选项中fill表示将弦与圆弧之间空间用指定颜色填满,outlie表示只规定弦线的颜色。

d.ellipse((100,100,600,600),outline=128)   #画圆
d.chord((100,100,600,600),0,90,outline='red') #画一条弦
d.chord((100,100,600,600),90,180,fill='red') #画弦并且将弦与弧区域着色
(6)d.pieslice([x1,y1,x2,y2],startAngle,endAngle,options)   #用法与ellipse相同,用于画起始角度间的扇形区域。options选项中fill选项将扇形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓。

d.ellipse((100,100,600,600),outline=128)   #画一个圆
d.pieslice((100,100,600,600),180,210,outline=128) #在圆内画180度到210度的扇形区域轮廓
d.pieslice((100,100,600,600),60,90,fill='blue') #画60度到90度的扇形区域
(7)d.polygon([x1,y1,x2,y2...],options)   #根据坐标画多边形,Python会根据第一个参量中的xy坐标对,连接出整个图形。options选项中fill选项将多边形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓。

d.polygon([(200,200),(600,300),(300,600)],outline = "red")
d.polygon([(300,300),(500,300),(300,500),(500,500)],fill = "red")
t.show()
(8)d.rectangle([x1,y1,x2,y2],options)   #在给定区域内画一个矩形,(x1,y1)表示矩形左上角坐标值,(x2,y2)表示矩形右下角坐标值。options选项中fill选项将多边形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓。

d.rectangle((200,200,500,500),outline = "red")   #画矩阵
d.rectangle((250,300,450,400),fill = 128)
(9)d.text(position,  string,  options)   #Position是一个二元元组,指定字符串左上角坐标,string是要写入的字符串。options选项可以为fill或者font(只能选择其中之一作为第三参量,不能两个同同时存在,要改变字体颜色,见ImageFont模块中的NOTE)。其中fill指定字的颜色,font指定字体与字的尺寸,font必须为ImageFont中指定的font类型,具体用法见ImageFont.Truetype()。

#在空白图像上矩形区域内添加文字
text = "hello, python!"
d.rectangle((200,200,500,500),outline = "red")
d.text((300,350),text,"red")

实例1:

import Image,ImageFont,ImageDraw

image1 = Image.open("WALLPAPER.jpg")
draw = ImageDraw.Draw(image1) ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\STXINGKA.TTF",120)
draw.rectangle((180,100,900,900),outline = "red")
draw.text((200,400),"www.okorder.com",font=ft,fill="blue")
image1.save("new_wallpaper.jpg","JPEG")

实例2:生成验证码

#!/usr/bin/env python
# -*- coding:utf-8 -*- import Image, ImageDraw, ImageFont, ImageFilter
import random
# 随机字母:
def rndChar():
return chr(random.randint(65, 90))
# 随机颜色1:
def rndColor():
return (random.randint(64, 255), random.randint(64, 255),random.randint(64, 255))
# 随机颜色2:
def rndColor2():
return (random.randint(32, 127), random.randint(32, 127),random.randint(32, 127))
# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype("C:\\Windows\\Fonts\\Arial.ttf", 36) #注意系统字体的路径
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
for y in range(height):
draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
draw.text((60 * t + 10, 10), rndChar(), font=font,
fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
im = image.save('code.jpg', 'jpeg')
m = Image.open('code.jpg')
m.show()

输出结果为:

Python模块:PIL的更多相关文章

  1. max os 安装python模块PIL

    下载libjpeg和zlib: http://www.ijg.org/files/jpegsrc.v9.tar.gz http://zlib.net/zlib-1.2.8.tar.gz 安装libjp ...

  2. 使用Python的PIL模块来进行图片对比

    使用Python的PIL模块来进行图片对比 在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死, ...

  3. Python基础篇【第5篇】: Python模块基础(一)

    模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...

  4. windows环境下安装python模块大招

    python发展到今天,感觉版本有点控制不住了,同时出现多个版本python2.5,python2.7 python 3 ,同时跨越windows,mac,*inux等多个平台,还有32位,64位等不 ...

  5. 50个很棒的Python模块

    50个很棒的Python模块 我很喜欢Python,Python具有强大的扩展能力,我列出了50个很棒的Python模块,包含几乎所有的需要:比如Databases,GUIs,Images, Soun ...

  6. Python深入:Distutils发布Python模块--转载

    https://blog.csdn.net/gqtcgq/article/details/49255995 Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Pyth ...

  7. python模块大全

    python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...

  8. python模块学习第 0000 题

    将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...

  9. python开发_常用的python模块及安装方法

    adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctype ...

  10. [转]50个很棒的Python模块

    转自:http://www.cnblogs.com/foxhengxing/archive/2011/07/29/2120897.html Python具有强大的扩展能力,以下列出了50个很棒的Pyt ...

随机推荐

  1. Linux进阶文件系统管理之RAID

    RAID 1.引言 RAID全称Redundant Arrays of Inexpensive Disks / Redundant Arrays of Independent Disks,即独立冗余磁 ...

  2. 深入理解CSS溢出overflow & overflow:hidden真的失效了吗[转载]

    深入理解CSS溢出overflow http://www.cnblogs.com/xiaohuochai/p/5289653.html overflow:hidden真的失效了吗 http://www ...

  3. cache-contro页面缓存处理设置

    <meta http-equiv="pragma" content="no-cache">,pragma与no-cache用于定义页面缓存,不缓存页 ...

  4. java System.getProperty()参数大全

    java.version Java Runtime Environment versionjava.vendor Java Runtime Environment vendorjava.vendor. ...

  5. MAXIMO-数据库配置属性数据类型解释

    ALN:       字母数字字符,混合大小写,最大长度取决于数据库     Oracle = 4000 个字符     Sql Server = 8000 个字符     DB2 = 32672 个 ...

  6. 使用英文版eclipse保存代码,出现some characters cannot be mapped using "Cp1251" character encoding.

    some characters cannot be mapped using "Cp1251" character encoding. 解决办法:方案一: eclipse-> ...

  7. ES6 学习笔记(1)

    恰逢换工作之际,新公司的是以 ES6 + webpack + vue 为技术栈, 正好ES6是我下个学习目标, 因此买了阮老师的 ES6标准入门,也当是支持阮老师了. 笔记将会照着这本书的阅读展开而做 ...

  8. LR常用函数以及调用自定义函数

    2.LR常用函数以及调用自定义函数 2.1.LR常用函数以及对信息的判断 2.1.1. LR内部自定义函数 在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示[il ...

  9. css小知识之伪元素

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  10. Java Annotation 注解

    java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...