• python自动化之图像


    '''

    RGBA值:指定颜色中的红、绿、蓝和alpha(透明度)的值

    RGBA                                            名称

    (255,255,255,255)            White

    (0,128,0,255)                     Green

    (128,128,128,255)            Gray

    (0,0,0,255)                                   Black

    (255,0,0,255)                     Red

    (0,0,255,255)                     Blue

    (255,255,0,255)                          Yellow

    (128,0,128,255)                          Purple

    '''

    from PIL import ImageColor

    ImageColor.getcolor('red','RGBA')

    Out[104]: (255, 0, 0, 255)

    ImageColor.getcolor('RED','RGBA')

    Out[105]: (255, 0, 0, 255)

    ImageColor.getcolor('Black','RGBA')

    Out[106]: (0, 0, 0, 255)

    ImageColor.getcolor('chocolate','RGBA')

    Out[107]: (210, 105, 30, 255)

    ImageColor.getcolor('CornflowerBlue','RGBA')

    Out[108]: (100, 149, 237, 255)

    '''

    原点位于图像左上角的像素,用符号(0,0)指定:

    x坐标,从原点开始,从左至右增加;

    y坐标,从原点开始,从上至下增加;

    矩阵元组参数:

    左:该矩阵的最左边的x坐标

    顶:该矩阵的顶边的y坐标

    右:该矩阵的最右下边的x坐标

    底:该矩阵的最右下边的y坐标

    '''

    #################用PIL模块操作图像#################

    from PIL import Image

    one=Image.open(r'C:UsersAdministratorDesktop卡10056_卡表.jpg')

    '''

    可以调用Image.open(),传入文件名字符串,对Image对象的所有更改都可以保存到

    图像文件中(也是任何格式).所有的旋转、调整大小、裁剪、绘画和其他图像操作

    都通过这个Image对象上的方法调用来完成

    '''

    from PIL import Image

    one=Image.open(r'C:UsersAdministratorDesktop卡10056_卡表.jpg')

    one.size

    wid,hei=one.size

    wid

    hei

    one.filename

    one.format

    one.format_description

    one.save(r'C:UsersAdministratorDesktopone.jpg')

    '''

    Image.new()返回的对象表示空白的图像:

    1、字符串'RGBA'

    2、大小,两个整数元组,作为新图像的宽度和高度

    3、背景颜色:支持传入标准颜色名称的字符串,ImageColor.getcolor()函数的返回值;默认黑色

    '''

    from PIL import Image

    im=Image.new('RGBA',(100,200),'purple')

    im.save(r'C:UsersAdministratorDesktopim.jpg')

    im2=Image.new('RGBA',(20,20))

    im2.save(r'C:UsersAdministratorDesktopim2.jpg')

    ##################裁剪图片

    ############crop函数带的参数为(起始点的横坐标,起始点的纵坐标,终点的横坐标,终点的纵坐标)##############

    ############crop函数:原始的Image对象原封不动,crop()方法返回一个新的Image对象#########

    from PIL import Image

    one=Image.open(r'C:UsersAdministratorDesktopone.jpg')

    cropped=one.crop((200,400,300,500))

    cropped.save(r'C:UsersAdministratorDesktopcropped.png')

    #######################################复制和粘贴图像到其他图像#################################

    '''

    paste()方法有两个参数:

    1、“源”Image对象

    2、包含x和y坐标的元组,指明源Image对象粘贴到主Image对象时左上角的位置

    '''

    from PIL import Image

    oneIm=Image.open(r'C:UsersAdministratorDesktopone.jpg')

    oneCopyIm=oneIm.copy()

    faceIm=oneIm.crop((335,345,565,560))

    faceIm.size

    oneCopyIm.paste(faceIm,(0,0))

    oneCopyIm.paste(faceIm,(400,500))

    oneCopyIm.save(r'C:UsersAdministratorDesktop est.jpg')

    #######################################调整图像大小#################################

    '''

    resize()方法不会在原图上修改Image对象,而是返回一个新的Image对象

    '''

    from PIL import Image

    oneIm=Image.open(r'C:UsersAdministratorDesktopone.jpg')

    width,height=oneIm.size

    quartersizedIm=oneIm.resize((int(width/2),int(height/2)))

    quartersizedIm.save(r'C:UsersAdministratorDesktop estone.jpg')

    svelteIm=oneIm.resize((width,height+300))

    svelteIm.save(r'C:UsersAdministratorDesktop esttwo.jpg')

    #######################################旋转和翻转图像#################################

    '''

    rotate()方法不会在原图上修改Image对象,而是返回一个新的Image对象

    oneIm.rotate(90).save(r'C:UsersAdministratorDesktop otated90.jpg')

    oneIm.rotate(180).save(r'C:UsersAdministratorDesktop otated180.jpg')

    oneIm.rotate(90).save(r'C:UsersAdministratorDesktop otated270.jpg')

    当图像旋转90度或270度时,宽度和高度会变化.如果旋转其他角度,图像的原始尺寸会保持.

    rotate()方法有一个可选的expand关键字参数,如果设置为True,就会放大图像的尺寸,

    以适应整个旋转后的新图像

    '''

    oneIm.rotate(6).save(r'C:UsersAdministratorDesktop otated6.jpg')

    oneIm.rotate(6,expand=True).save(r'C:UsersAdministratorDesktop otated6_expanded.jpg')

    '''

    利用transpose()方法,还可以得到图像的"镜像翻转"

    必须向transpose()方法传入Image.FLIP_LEFT_RIGHT

    或Image.FLIP_TOP_BOTTOM

    '''

    oneIm.transpose(Image.FLIP_LEFT_RIGHT).save(r'C:UsersAdministratorDesktophorizontal_flip.jpg')

    oneIm.transpose(Image.FLIP_TOP_BOTTOM).save(r'C:UsersAdministratorDesktopvertical_flip.jpg')

    #######################################更改单个像素#################################

    '''

    单个像素的颜色可以通过getpixel()和putpixel()方法设置和取得.

    putpixel()方法还接受一个元组,作为该像素的颜色.这个颜色参数是四整数

    RGBA元组或三整数RGB元组

    '''

    from PIL import ImageColor

    im=Image.new('RGBA',(100,100))

    im.getpixel((0,0))

    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((0,0))

    im.getpixel((0,50))

    im.save(r'C:UsersAdministratorDesktopputPixel.png')

    #######################################在图像上绘画#################################

    #####得到一个可以绘制形状和文字的白色图像

    from PIL import Image,ImageDraw

    im=Image.new('RGBA',(200,200),'while')

    draw=ImageDraw.Draw(im)

    '''

    绘制形状:

    point(xy,fill):x,y表示画的点的列表,形式为[(x,y),(x,y)...],fill表示点的颜色,RGBA元组/颜色名称的字符串

    line(xy,fill,width):x,y表示绘制的线的一个连接点,形式为[(x,y),(x,y)...],fill表示线的颜色,RGBA元组/颜色名称的字符串,width表示线的宽度

    rectangle(xy,fill,outline):x,y参数表示一个矩形元组,形式为[left,top,right,bottom],fill表示颜色,RGBA元组/颜色名称的字符串,outline为可选,矩阵轮廓的颜色

    ellipse(xy,fill,outline):x,y参数表示刚好包含该椭圆的矩形,形式为[left,top,right,bottom],fill表示颜色,RGBA元组/颜色名称的字符串,outline为可选,椭圆轮廓的颜色

    polygon(xy,fill,outline):x,y参数是一个元组列表,表示多边形边的连接点,形式为[(x,y),(x,y)...],fill表示颜色,RGBA元组/颜色名称的字符串,outline为为可选,多边形轮廓的颜色

    http://pillow.readthedocs.org/en/latest/reference/ImageDraw.html

    '''

    from PIL import Image,ImageDraw

    im=Image.new('RGBA',(200,200),'white')

    draw=ImageDraw.Draw(im)

    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')

    draw.line([(0,0),(100,0),(100,100),(0,100),(0,0)],fill='black')

    for i in range(100,200,10):

             draw.line([(i,0),(200,i-100)],fill='green')

    im.save(r'C:UsersAdministratorDesktopdrawing.jpg')

    #######################################在图像上绘制文本#################################

    '''

    绘制文本:

    text():xy,text,fill,font

    xy两个整数的元组,指定文本区域的左上角

    text参数想写入的文本字符串

    fill可选,文本的颜色

    font可选,是一个ImageFont对象,用于设置文本的字体和大小

    其中,很难预知一块文本在给定的字体下的大小,textsize()方法,第一参数为测量文本字符串

             第二参数为可选的ImageFont对象,返回文本宽度和高度

    ImageFont模块,ImageFont.truetype()函数,有两个参数,第一个是字符串,表示字体的TrueType文件,

             是硬盘上实际的字体文件,TrueType字体文件具有.TTF文件扩展名;第二个是整数,表示字体大小的

             点数(而不是像素).Pillow创建的PNG图像默认是每英寸72像素,一点是1/72英寸

    '''

    from PIL import Image,ImageDraw,ImageFont

    import os

    im=Image.new('RGBA',(200,200),'white')

    draw=ImageDraw.Draw(im)

    draw.text((20,150),'Hello',fill='purple')

    fontsFolder='FONT_FOLDER'

    arialFont=ImageFont.truetype(os.path.join(fontsFolder,'arial.ttf'),32)

    draw.text((100,150),'Howdy',fill='gray',font=arialFont)

    im.save(r'C:UsersAdministratorDesktop ext.png')

    '''

    小结:

    crop()、copy()、paste()、resize()、rotate()、transpose()、save()

    '''

  • 相关阅读:
    (转) c++ 迭代器
    (转) 学习C++ -> 向量(vector)
    latex 模版
    javascript继承篇
    ES6的Map和Set的使用,以及weakMap的一点理解
    JavaScript中的eval函数
    Node.js中的进程与线程
    普通函数与箭头函数的区别是什么?
    git 远程拉去代码 输入用户名密码
    npm 设置镜像
  • 原文地址:https://www.cnblogs.com/dudumiaomiao/p/7241870.html
Copyright © 2020-2023  润新知