PIL模块 像素、图像、画笔等操作相关

# -*- coding: utf-8 -*-
'''
PIL库处理颜色 及 图片。分别对应库 ImageColor 和 Image

使用:
图像像素值大小操作:  img.resize(())  注意参数 像素大小是 元组类型()
图像像素值变换:      img.point(lambda i : i*2)    point()方法可以对图像的像素值进行变换

'''



from PIL import ImageColor  #处理颜色
from PIL import Image       #处理图片

# =============================================================================
# #颜色操作
# =============================================================================

#获取颜色 ImageColor.getcolor(,)  其中参数'RGBA'是模式
redR=ImageColor.getcolor('RED','RGB')       #获取红色(不区分大小写)的RGB值 返回元祖
greeR=ImageColor.getcolor('green','RGBA')   #获取绿色的RGBA值,返回元祖  
blueR=ImageColor.getcolor('Blue','RGBA')    #获取蓝色的RGBA值  返回元祖
blacekR=ImageColor.getcolor('Black','RGBA')                   #获取黑色色的RGBA值  返回元祖
chocolateR=ImageColor.getcolor('chocolate','RGBA')            #获取巧克力色的RGBA值  返回元祖
cornflowerBlueR=ImageColor.getcolor('CornflowerBlue','RGBA')  #获取菊蓝色的RGBA值  返回元祖
pinkR=ImageColor.getcolor('Pink','RGBA')                      #获取粉红色的RGBA值  返回元祖
#print(redR)

#在线计算颜色RGBA值  https://www.rapidtables.com/web/color/RGB_Color.html




# =============================================================================
# #图片操作(.new()新建,.open()打开,.save()保存)
# =============================================================================

#新建图片  Image.new('',(),'')  参数:(模式、像素元祖、背景颜色)
newImg=Image.new('RGBA',(100,200),'purple')  #指定背景颜色为 紫色,并直接保存。
#newImg=Image.new('RGBA',(100,200))          #未指定背景色,则默认就是空白透明看不见。
newImg.save('saveNewImg.png')                #保存图片 保存后才能显示,否则不。注意中间目录需要存在。


#打开图片 生成图片对象
reba1=Image.open('F:\\SpyderXIANGMUWENJIANJIA\\编程相关\\smtplib邮件相关\\reba1.jpg')  
#取像素值
dxxs=reba1.size                    #对象像素值  注意返回元祖类型(宽、高)
#多重复值像素值
width,high=reba1.size              #多重赋值 对象像素值
#取图片地址名称
dxwjmc=reba1.filename              #对象文件地址  返回对象文件相对路径名称
#取图片格式
dxwjgs=reba1.format                #对象文件格式
#取图片格式描述
dxwjgsms=reba1.format_description  #对象格式描述  即jpg 或 png等
#print(dxwjgs)
#print(dxwjgsms)
reba1.save('reba1Save.png')        #保存图片对象到文件名,相当于另存为。注意中间目录需要存在。


#剪切图片、复制图片、粘贴图片
reba1=Image.open('reba1.jpg')               #打开图片
reba1_W,reba1_H=reba1.size                  #多重复值获得 reba2图片的宽、高
#剪贴
reba1Crop=reba1.crop((475,188,744,568))     #剪切图片.crop(()) 参数一组元祖像素值:前两个定位左上角,后两个定位右下角
reba1Crop_W,reba1Crop_H=reba1Crop.size      #多重复制获得 剪切图片的宽、高。
reba1Crop.save('reba1Crop.png')             #保存已剪贴部分的图片
#复制
reba1Copy=reba1.copy()                      #复制图片.copy()
#粘贴 .paste(,(),)  三个参数:粘贴模板图片、像素位置、张贴模板背景(适用于透明模板背景,指定背景为模板背景,不指定则透明模板背景默认显示成为黑色)
reba1Copy.paste(reba1Crop,(0,0))            #粘贴图片 在reba2Copy上粘贴reba2Crop,粘贴像素位置(0,0)
reba1Copy.paste(reba1Crop,(0,reba1Crop_H))  #粘贴图片 在像素(0,reba2Crop_H)的位置
#reba2Copy.paste(reba2Crop,(0,reba2Crop_H*2),reba2Crop)  #第三参数指定粘贴模板背景  非透明模板背景则报错
reba1Copy.save('reba1CopyPaste.png')        #保存图片 复制并粘贴后保存图片

#平铺操作 for循环粘贴实现平铺马赛克操作
for w in range(0,reba1_W,reba1Crop_W):
    for h in range(0,reba1_H,reba1Crop_H):
        reba1Copy.paste(reba1Crop,(w,h))

reba1Copy.save('reba1CopyMSK.png')          #保存图片  已做平铺马赛克操作


#调整图片.resize(())、旋转图片.rotate()、镜像图片.transpose()

#调整图片大小操作 .resize(())  注意参数 像素大小是 元组类型()
reba2=Image.open('F:\\SpyderXIANGMUWENJIANJIA\\编程相关\\smtplib邮件相关\\reba2.jpg')
reba2_W,reba2_H=reba2.size
#改变图片像素大小
reba2Resize=reba2.resize((int(reba2_W*2),int(reba2_H*2)))  #注意像素大小是 元组类型
reba2Resize.save('reba2Resize.png')    #保存图片  改变像素size大小后的图片

#旋转图片角度操作 .rotate()   参数为旋转度  可选参数expand用来指定扩展图片显示图片四边角
reba2.rotate(90).save('reba2Rotate90.png')      #旋转90度 后 保存
reba2.rotate(180).save('reba2Rotate180.png')    #旋转180度 后 保存
reba2.rotate(270).save('reba2Rotate270.png')    #旋转270度 后 保存
reba2.rotate(350).save('reba2Rotate350.png')    #旋转350度 后 保存
reba2.rotate(350,expand=True).save('reba2Rotate350Expand.png')  #旋转350度、图片扩张到边角显示出来,后 保存。

#镜像反转图片操作
reba2.transpose(Image.FLIP_LEFT_RIGHT).save('reba2TransposeLR.png')  #镜像左右翻转
reba2.transpose(Image.FLIP_TOP_BOTTOM).save('reba2TransposeTB.png')  #镜像上下翻转






# =============================================================================
# #示例: 
# #结合颜色和图片 来操作: 像素 和 画布画笔
# =============================================================================


#像素操作
#.getpixel(())获取像素    注意参数是 元组类型位置参数
#.putpixel((),())填充像素  注意参数是 元组位置 及 RGBA元组值。

from PIL import Image,ImageColor


newImg_P=Image.new('RGBA',(100,200),'purple')   #新建图片,指定背景颜色为 紫色
#newImg=Image.new('RGBA',(100,200))             #未指定背景色,则默认就是空白透明看不见。
pixel_P=newImg_P.getpixel((0,0))                #获取指定位置像素值  RGB值,注意参数是元组类型
#print(pixel_P)                                 #输出指定位置像素值  RGB值
newImg_P.save('SsetPixel.png')

#for循环赋值图片的 前一半的像素值
for x in range(100):
    for y in range(100):
        newImg_P.putpixel((x,y),(20,165,210))   #设置指定位置像素值  RGB值。注意参数是 元组位置 及 RGBA元组值。
newImg_P.save('SsetPixel_A.png')                #保存图片  后才能显示,否则不存在于电脑。

#for循环赋值图片的 后一半的像素值
for x in range(100):
    for y in range(100,200):
        newImg_P.putpixel((x,y),ImageColor.getcolor('RED','RGBA'))
newImg_P.save('setPixel_B.png')




#画笔操作:画直线line、矩形rectangle、椭圆ellipse、多边形polygon、文字text

#注意: 
#直线.line 的轨迹参数是[]列表内多个像素值元祖形式,
#矩形及椭圆 的轨迹参数 是前两个为左上角像素值 和 后两个为右下角像素值
#多边形.polygon 的轨迹参数是()元祖内多个相熟元祖形式

from PIL import Image,ImageDraw,ImageFont

newImg_D=Image.new('RGBA',(200,200),'white')    #新建图片,指定背景白色
#newImg.save('SdrawImg.png')

draw=ImageDraw.Draw(newImg_D)  #创建画笔,作用于参数图片
#画直线操作draw.line()  参数([],fill颜色,width线型) 其中列表参数是画笔轨迹。
draw.line([(0,0),(199,0),(199,199),(0,199),(100,100)],fill='green',width=10)   #画直线操作 
draw.rectangle((20,30,60,60),fill='blue',outline='black')       #画矩形操作  颜色蓝色,外延线黑色
draw.ellipse((60,60,150,150),fill='pink')                       #画椭圆操作  颜色粉红色
draw.polygon(((10,100),(50,190),(170,130),(100,60)),fill='brown',outline='black')  #画多边形操作

#for循环实现交叉画线段,效果在右上角形成网状
#给定两个像素点轨迹,即:每次循环就单独添加一条线段。
for i in range(100,200,1):
    draw.line([(i,0),(200,i-100)],fill='purple')
#    print(i)  

#定义字体  复制字体地址名称 位于电脑 Windows: C:\Windows\Fonts; On OS X: /Library/Fonts
FONT=ImageFont.truetype('ygyxsziti2.0.ttf',12)
draw.text((150,150),'血皇敖天',fill='black',font=FONT)  #如果没有定义字体,注意中文无法输出



newImg_D.save('SdrawImg.png')

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值