Skip to content

Files

Latest commit

 

History

History
158 lines (110 loc) · 3.77 KB

PIL.md

File metadata and controls

158 lines (110 loc) · 3.77 KB

PIL

ImageDraw

Image函数库是用来操作图像的,那么这个函数库使用来画图的,这些都属于PIL图像处理库。

import Image,ImageDraw

# from PIL import Image, ImageDraw

pic = Image.open("../images/test2.jpg")
draw = ImageDraw.Draw(pic)
width,height = pic.size

#画两条对角线
draw.line(((0,0),(width-1,height-1)),fill=(136,56,99))
draw.line(((0,height-1),(width-1,0)),fill=(6,156,209))

#画一个圆
draw.arc((0,0,width-1,height-1),0,360,fill=(255,255,0))
pic.show()
pic.save("../images/test5.jpg")

保存为imageDraw_demo.py,运行,看一下结果。

imageDraw_demo.jpg

ImageEnhance

这个函数库是用来图像增强,用来色彩增强,亮度增强,对比度增强,图像尖锐化等增强操作。

import Image,ImageEnhance
pic = Image.open("../images/test2.jpg")

#亮度增强
brightness = ImageEnhance.Brightness(pic)
bright_pic = brightness.enhance(2.0)
bright_pic.show()
bright_pic.save("../images/test6.jpg")

#图像尖锐化
sharpness = ImageEnhance.Sharpness(pic)
sharp_pic = sharpness.enhance(5.0)
sharp_pic.show()
sharp_pic.save("../images/test7.jpg")

#对比度增强
contrast = ImageEnhance.Contrast(pic)
contrast_pic = contrast.enhance(3.0)
contrast_pic.show()
contrast_pic.save("../images/test8.jpg")

保存为imageEnhance_demo.py,运行,看一下结果。 在你的文件夹里就可以看到几张照片,确实是能够有相应的改变。

imageFont

遇到了问题,还有其他的在安装opencv的时候也遇到了一个问题。

ImportError: The _imagingft C module is not installederror: Unable to find vcvarsall.bat,算了。不然就可以用Python写验证码了。

在Python中用PIL做验证码

# coding=utf-8
try:
    import Image, ImageDraw, ImageFont, ImageFilter
except ImportError:
    from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random


# 随机字母:
def rndChar():
    return chr(random.randint(65, 90))


# 随机颜色1:
def rndColor():
    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))


# 随机颜色2:
def rndColor2():
    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))


if __name__ == '__main__':
    # 240 x 60:
    width = 60 * 4
    height = 60
    image = Image.new('RGB', (width, height), (255, 255, 255))
    # 创建Font对象:
    font = ImageFont.truetype('Arial.ttf', 36)
    # 创建Draw对象:
    draw = ImageDraw.Draw(image)
    # 填充每个像素:
    for x in range(width):
        for y in range(height):
            draw.point((x, y), fill=rndColor())
    # 输出文字:
    for t in range(4):
        draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())

    # 模糊:
    image = image.filter(ImageFilter.BLUR)
    image.show()
    image.save('code.jpg', 'jpeg')

或者使用 graphic-verification-code

imageFilter

图片模糊效果。

import Image,ImageFilter
pic = Image.open("../images/test2.jpg")
pic1 = pic.filter(ImageFilter.BLUR)
pic1.show()
pic1.save("../images/test9.jpg")

保存为imageFilter_demo.py,运行,看一下结果。

imageFilter_demo.jpg

转换 JPEG 文件

将标准型 JPEG (Baseline JPEG)文件转换为 渐进式 JPEG (Progressive JPEG)文件。

# coding=utf-8

from PIL import Image, ImageFile

from exceptions import IOError

img = Image.open("code.jpg")
des = "code_progress.jpg"

try:
	img.save(des, "JPEG", quality=80, optimize=True, progressive=True)
except IOError:
	ImageFile.MAXBLOCK = img.size[0] * img.size[1]
	img.save(des, "JPEG", quality=80, optimize=True, progressive=True)

也可以使用 jpegtran -copy none -progressive <inputfile> <outputfile>