pillow学习

Posted hong976737

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pillow学习相关的知识,希望对你有一定的参考价值。

  这几天学习了Pillow(为pyhton加强了图像处理能力),做一个简单的总结,当然这只是很浅显的一部分罢了,想要深入学习的可以移步pillow官方文档

  首先说一下,这个库可能会用到哪个地方,好吧这些都是借鉴pillow的中文网站

1.图像存储,你可以用它来建立缩略图,转换格式,打印图片,验证图片格式等

2.图像显示,该库为win提供了一个Windows DIB interface

3.图像处理,基本的图像处理,包括点操作,使用内置卷积内核过滤,色彩空间装换,支持更改图像大小、旋转、自由变换,还有一个直方图方法允许你统计图像用于对比增强和全局统计分析

下面说一下我看到的几个简单的图像处理功能

 

技术分享图片
from PIL import Image, ImageFilter
# 加载一个图像
img = Image.open("image.jpg")
# 返回一个包含图片
# 1.format(来源)
# 2.mode(图像bands数量名称和像素类型深度)常见的mode有(L灰度图像,RGB真彩图像,CMYK出版图像)
# 3.size(一个存储图像尺寸的元组)的信息,

#显示图像
img.show()
# 改变图像格式
Image.open(image.jpg).save(image.png)
# 创建缩略图
img.thumbnail((70, 100))
# 图像保存
img.save("image.jpg")
# 复制图片一个区域,同样是一个元组(左,上,右,下)
image = img.crop((100, 100, 400, 400))
# 图像旋转选定特定参数
im = image.transpose(Image.ROTATE_180)
# 将复制的图片粘贴到元图像上,旋转180°, 注意:box大小一定要相同匹配
box = (200, 200, 500, 500)
img.paste(im, box)
# 几何变换
# 修改图像尺寸
img = img.resize((200, 200))
# 旋转图像,自定义参数
img = img.rotate(45)
# 图像颜色模式转换
img = Image.open(image.jpg).convert("L")
# 增强过滤器,增强图像颜色效果
img = img.filter(ImageFilter.DETAIL)
img.show()
基础方法

 

接下来我们来用它做一些有意思的事

1.生成简单的验证码

 

from PIL import Image, ImageDraw, ImageFont, ImageFilter, ImageChops
import random
class Image_code():
    def __init__(self):
        """定制图片默认宽高,面板"""
        self._height = 100
        self._width = 200
        self.image = Image.new(RGBA, (self._width, self._height), grey)

    @property
    def content(self):
        """验证码内容"""
        list = [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q,                R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h,                i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y,                z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        return "".join([str(i) for i in random.sample(list, 4)])

    def canvas(self, image):
        """生成背景中随机点效果"""
        draw = ImageDraw.Draw(image)
        for i in range(200):
            for j in range(200):
                draw.point((i, j), fill=random.randint(-128, 0))

    def tilt(self):
        """
        实现图片中内容倾斜,由于无法直接使其倾斜
        1.使原图片倾斜,裁剪边角多余
        2.创建相同类型的图片面板
        3.使用composite融合两张图片(注意融合的两张图片的mode应该相同)
        """
        img = Image.new(RGBA, (self._width, self._height), red)
        self.canvas(img)
        image = self.image.rotate(random.randint(-10, 10), expand=0)
        self.image = Image.composite(image, img, image)

    def write(self):
        """面板上写内容"""
        font = ImageFont.truetype("arial.ttf", 60)
        draw = ImageDraw.Draw(self.image)
        draw.text((28, 20), self.content, font=font, fill=random.randint(0, 255))

    def run(self):
        self.canvas(self.image)
        self.write()
        self.tilt()
        self.image.save(image.png)

a = Image_code()
a.run()

 

看一下效果:

技术分享图片

2.图片转换为字符串输出
from PIL import Image
class Pixelate():
    def __init__(self, image, file_name):
        self._full_style = list("[email protected]%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`‘.")
        self._unit = 256 / len(self._full_style)
        self.image = image
        self.file_name = file_name
        self.s = ‘‘

    def full(self):
        """使用约定好的字符填充像素点"""
        img = Image.open(self.image).convert("L")
        for i in range(0, img.size[1], 2):
            for j in range(0, img.size[0], 2):
                pixel = img.getpixel((j, i))  # 宽高 像素点
                # 字符填充规则
                self.s += self._full_style[int(pixel / self._unit)]
            self.s += 


    def conserve(self, file_name):
        """字符保存到文件"""
        with open(file_name, w) as f:
            f.write(self.s)

    def run(self):
        self.full()
        self.conserve(self.file_name)
        print("成功")

image = input("图片路径:")
file_name = input("要保存的文件名:")
pix = Pixelate(image, file_name)
pix.run()

看一下效果:

原图(图片来源百度如有侵权请联系删除)                 效果图

 技术分享图片

 

目前大概学习了这么多,简单的写一下总结,为以后学习提供一个帮助

 


以上是关于pillow学习的主要内容,如果未能解决你的问题,请参考以下文章

pillow模块快速学习

Python学习笔记__13.1章 三方模块 Pillow

PIL(Pillow)的学习笔记

Pillow学习笔记一——入门

爬虫学习笔记(十七)—— 字符验证码

Pillow库进行图像文件处理(配图详解)