pillow包

2022-01-13  本文已影响0人  公子小白123

pillow包

pillow:(了解)(python image library)是一个有关图像图片处理的包,这个包底层用的C C++,但PIL包是python2下使用。所以又更新了一个适合python3版本的、基于PIL包的新包pillow。

安装pillow:

(cmd) pip install pillow

引入:from PIL import Image, ImageFilter

image_path = Image.open('img.jpg')   

# image_path = Image.open('图片相对路径')

print(image_path.size)

width, height = image_path.size

print(width, height)

1.缩放 thumbnail

image_path.thumbnail((800,600))

两个参数,第一个参数是宽,第二个参数是高

2.保存为新图片 save

image_path.save('img', 'jpeg')   

# image_path.save('文件名', '保存文件格式(如:jpeg)')

3.旋转 rotate

image_rotate = image_path.rotate(90)

image_rotate.show()   

# 打开文件,用于临时打开

4.滤镜

ImageFilter(滤镜)

GaussianBlur高斯模糊

Color3DLUT颜色三地

BLUR默认颜色

image_ImageFilter = image_path1.filter(ImageFilter.BLUR)

image_ImageFilter.show()

image_path1.save('demo3.jpg','jpeg')

随机生成验证码

(了解)RGB:red green blue 色光三原色,(11,225,5)

引入:

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

1.随机字母

def random_char():

    return chr(random.randint(65, 90))

2.随机数字

def random_num():

    return random.randint(0,9)

3.随机字体颜色

def random_color():

    return (random.randint(150,255),random.randint(150,255),random.randint(150,255))

4.随机背景颜色

def random_color2():

    return (random.randint(30, 120), random.randint(30, 120), random.randint(30, 120))

5.生成空白背景图层

image = Image.new('RGB', size=(240, 60), color=(255, 255, 255))

6.生成绘制对象

draw = ImageDraw.Draw(image)

7.字体对象 ,字体、字号

font = ImageFont.truetype('arial.ttf', 36)

8.循环像素点并填充颜色

for x in range(0, 240):

    for y in range(0, 60):

        draw.point(xy=(x, y), fill=random_color2())

9.生成文字

for t in range(0, 4):

    draw.text((60*t+20, 10), random_char(), font=font, fill=random_color())

10.加模糊滤镜

image = image.filter(ImageFilter.BLUR)

11.保存

image.save('demo4.jpg', 'jpeg')

画点完整代码:

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

class Picture(object):

    def __init__(self, text_str, size, background):

        '''

        text_str: 验证码显示的字符组成的字符串

        size:  图片大小

        background: 背景颜色

        '''

        self.text_list = list(text_str)

        self.size = size

        self.background = background

    def create_pic(self):

        '''

        创建一张图片

        '''

        self.width, self.height = self.size

        self.img = Image.new("RGB", self.size, self.background)

        # 实例化画笔

        self.draw = ImageDraw.Draw(self.img)

    def create_point(self, num, color):

        '''

        num: 画点的数量

        color: 点的颜色

        功能:画点

        '''

        for i in range(num):

            self.draw.point(

                (random.randint(0, self.width), random.randint(0, self.height)),

                fill=color

            )

    def create_line(self, num, color):

        '''

        num: 线条的数量

        color: 线条的颜色

        功能:画线条

        '''

        for i in range(num):

            self.draw.line(

                [

                    (random.randint(0, self.width), random.randint(0, self.height)),

                    (random.randint(0, self.width), random.randint(0, self.height))

                ],

                fill=color

            )

    def create_text(self, font_type, font_size, font_color, font_num, start_xy):

        '''

        font_type: 字体

        font_size: 文字大小

        font_color: 文字颜色

        font_num:  文字数量

        start_xy:  第一个字左上角坐标,元组类型,如 (5,5)

        功能: 画文字

        '''

        font = ImageFont.truetype(font_type, font_size)

        self.draw.text(start_xy, " ".join(random.sample(self.text_list, font_num)), font=font, fill=font_color)

    def opera(self):

        '''

        功能:给画出来的线条,文字,扭曲一下,缩放一下,位移一下,滤镜一下。

        就是让它看起来有点歪,有点扭。

        '''

        params = [

            1 - float(random.randint(1, 2)) / 100,

            0,

            0,

            0,

            1 - float(random.randint(1, 10)) / 100,

            float(random.randint(1, 2)) / 500,

            0.001,

            float(random.randint(1, 2)) / 500

        ]

        self.img = self.img.transform(self.size, Image.PERSPECTIVE, params)

        self.img = self.img.filter(ImageFilter.EDGE_ENHANCE_MORE)

if __name__ == "__main__":

    strings = "abcdefghjkmnpqrstwxyz23456789ABCDEFGHJKLMNPQRSTWXYZ"

    size = (150, 50)

    background = 'white'

    pic = Picture(strings, size, background)

    pic.create_pic()

    pic.create_point(500, (220, 220, 220))

    pic.create_line(30, (220, 220, 220))

    pic.create_text("simsun.ttc", 24, (0, 0, 205), 5, (7, 7))

    pic.opera()

    pic.img.show()

上一篇下一篇

猜你喜欢

热点阅读