pillow包

作者: 公子小白123 | 来源:发表于2022-01-13 12:35 被阅读0次

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

    相关文章

      网友评论

          本文标题:pillow包

          本文链接:https://www.haomeiwen.com/subject/npdrcrtx.html