Python-PIL—Mode,ImageFilter对比实践


原图

  • 学习 一定要找一个好的Object(???),不然怎么学的下去嘛。
    在这里插入图片描述

图像的mode

  • mode属性是图像的色彩通道的数量和名字,同时也包括像素的类型和颜色深度信息。她们之间的区别可能要放大点才能看得清,比如说一万倍?。
    modes 描述
    1 1位像素,黑和白,存成8位的像素
    L 8位像素,黑白
    P 8位像素,使用调色板映射到任何其他模式
    RGB 3*8位像素,真彩
    RGBA 4*8位像素,真彩+透明通道
    CMYK 4*8位像素,颜色隔离
    YCbCr 3*8位像素,彩色视频格式
    I 32位整形像素
    F 32位浮点型像素
    RGBX 有padding的真彩色
    HSV

在这里插入图片描述

图像滤波器

  • 你更喜欢花非花,雾非雾的朦胧,还是线条清晰,棱角分明的透彻。
    Filter 描述
    BLUR 模糊滤波
    CONTOUR 轮廓滤波
    DETAIL 细节增强滤波
    EDGE_ENHANCE 边缘增强滤波
    EDGE_ENHANCE_MORE 深度边缘增强滤波
    EMBOSS 浮雕滤波
    FIND_EDGES 寻找边缘信息的滤波
    SMOOTH 平滑滤波
    SMOOTH_MORE 深度平滑滤波
    SHARPEN 锐化滤波

在这里插入图片描述

原代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/local/env python
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont, ImageFilter

font_posotion = 20,20
color = 255,0,0,255
font = ImageFont.truetype('Arial.ttf', size=25, encoding="unic")
thumbnail_size = 400,400
row_count = 4


def create_thumbnail(src_file):
size = thumbnail_size
im = Image.open(src_file)

im.thumbnail(size, Image.ANTIALIAS)
return im


class MyFilter(object):
BLUR = "BLUR"
CONTOUR = "CONTOUR"
DETAIL = "DETAIL"
EDGE_ENHANCE = "EDGE_ENHANCE"
EDGE_ENHANCE_MORE = "EDGE_ENHANCE_MORE"
EMBOSS = "EMBOSS"
FIND_EDGES = "FIND_EDGES"
SMOOTH = "SMOOTH"
SMOOTH_MORE = "SMOOTH_MORE"
SHARPEN = "SHARPEN"

FilterList = [BLUR, CONTOUR, DETAIL,
EDGE_ENHANCE, EDGE_ENHANCE_MORE, EMBOSS,
FIND_EDGES, SMOOTH, SMOOTH_MORE,
SHARPEN]

ImageFilterList = [ImageFilter.BLUR, ImageFilter.CONTOUR, ImageFilter.DETAIL,
ImageFilter.EDGE_ENHANCE, ImageFilter.EDGE_ENHANCE_MORE, ImageFilter.EMBOSS,
ImageFilter.FIND_EDGES, ImageFilter.SMOOTH, ImageFilter.SMOOTH_MORE,
ImageFilter.SHARPEN]

class MyMode(object):
MODE1 = "1"
L = "L"
I = "I"
F = "F"
P = "P"
RGB = "RGB"
RGBX = "RGBX"
RGBA = "RGBA"
CMYK = "CMYK"
YCbCr = "YCbCr"
# LAB = "LAB"
HSV = "HSV"

ModeList = [MODE1, L, I, F, P, RGB, RGBX, RGBA, CMYK, YCbCr, HSV]

def get_position(count):

width = thumbnail_size[0]
pic_width = width*row_count
position = (count * width)%pic_width, (count * width)/pic_width*width
return position

def get_pic_size(thumbnail_size, pic_num, row_count):
pic_width = thumbnail_size[0] * row_count
extra_row = 1 if pic_num % row_count else 0
pic_height = (pic_num / row_count + extra_row) * thumbnail_size[1]

return pic_width, pic_height

def create_filter(src_file):
count = 0
pic_size = get_pic_size(thumbnail_size, len(MyFilter.FilterList), row_count)
image = Image.new("RGBA", pic_size, "white")
thumbnail_im = create_thumbnail(src_file)

for i in range(0, len(MyFilter.FilterList)):
CONTOURimg = thumbnail_im.copy()
CONTOUR = CONTOURimg.filter(MyFilter.ImageFilterList[count])
CONTOURdraw = ImageDraw.Draw(CONTOUR)
CONTOURdraw.text(font_posotion, MyFilter.FilterList[count], font=font, fill=color)
image.paste(CONTOUR, get_position(count))
count += 1

# image.save("filter.jpg")
image.show()

def create_mode(src_file):
count = 0
pic_size = get_pic_size(thumbnail_size, len(MyMode.ModeList), row_count)
image = Image.new("RGBA", pic_size, "white")
thumbnail_im = create_thumbnail(src_file)

for i in range(0, len(MyMode.ModeList)):
img = thumbnail_im.copy()
CONTOURdraw = ImageDraw.Draw(img)
CONTOURdraw.text(font_posotion, MyMode.ModeList[count], font=font, fill=color)

CONTOUR = img.convert(MyMode.ModeList[i])

image.paste(CONTOUR, get_position(count))
count += 1

# image.save("mode.jpg")
image.show()


if __name__ == '__main__':
create_mode("res.jpg")
create_filter("res.jpg")



  目录