day30-20180610笔记

笔记:Python3 图片处理

 

一、图片处理

图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,如果你是python2.x,可以通过以下地址进行下载:http://www.pythonware.com/products/pil/index.htm,找到相对应的版本进行下载就可以了。
注意:PIL模块在python3.x中已经替换成pillow模块,文档地址:http://pillow.readthedocs.io/en/latest/,直接使用pip3 install pillow即可安装模块,导入时使用from PIL import Image.

爬虫:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/6/11 21:48
# @Author  : yangyuanqiang
# @File    : demon1.py


#
# urls = list()
#
# for i in range(1, 27):
#     url = 'http://www.apelearn.com/study_v2/chapter{0}.html'.format(i)
#     # print(url)
#     urls.append(url)
# # print(urls)
import re
import requests


reg = re.compile(r"<h3>目录列表</h3>\s+<ul>\s+([\s\S]*?</ul>)")
url = "http://www.apelearn.com/study_v2/"
session = requests.session()
r = session.get(url)
# print(r.encoding)
r.encoding = "utf-8"
html = r.text
# print(html)
htmlli = reg.findall(html)
# print(htmlli)
regurl = re.compile(r'''href="(.*?)"''')
if htmlli[0]:
    result = regurl.findall(htmlli[0])
    # print(result)

urls = list()
for i in result:
    url = "http://www.apelearn.com/study_v2/{0}".format(i)
    print(url)
    urls.append(urls)

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/6/11 21:49
# @Author  : yangyuanqiang
# @File    : demon2.py


import codecs

import PyPDF2
import os

files = list()
for fileName in os.listdir("aming"):
    if fileName.endswith(".pdf"):
        files.append(fileName)

newFiles = sorted(files, key=lambda d: int(d.split(".pdf")[0]))
print(newFiles)


os.chdir("aming")
pdfWriter = PyPDF2.PdfFileWriter()#生成一个空白的pdf
for item in newFiles:
    pdfReader = PyPDF2.PdfFileReader(open(item, "rb"))
    for page in range(pdfReader.numPages):
        pdfWriter.addPage(pdfReader.getPage(page))

with codecs.open("aminglinux.pdf", "wb") as f:
    pdfWriter.write(f)

 

图片处理:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/6/11 21:50
# @Author  : yangyuanqiang
# @File    : demon3.py


'''python3 操作图片需要
pip install pillow
'''
from PIL import Image
image = Image.open("test.jpg")
print(image.format, image.size, image.mode)
image.show()

#image的方法
#image.show()
#image.open(file)
#image.save(outputfile)
#image.crop(left, upper, right, lower)#抠图

# Image的几何处理:
# out = im.resize((128, 128))                     #调整图片大小
# out = im.rotate(45)                             #逆时针旋转 45 度角。
# out = im.transpose(Image.FLIP_LEFT_RIGHT)       #左右对换。
# out = im.transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。
# out = im.transpose(Image.ROTATE_90)             #旋转 90 度角。
# out = im.transpose(Image.ROTATE_180)            #旋转 180 度角。
# out = im.transpose(Image.ROTATE_270)            #旋转 270 度角。

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/6/11 21:50
# @Author  : yangyuanqiang
# @File    : demon4.py


'''python3 操作图片需要
pip install pillow
'''
from PIL import Image
image = Image.open("test.jpg")

cutjpg = image.crop((320, 65, 460, 220))
cutjpg.show()

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/6/11 21:51
# @Author  : yangyuanqiang
# @File    : demon5.py


'''python3 操作图片需要
pip install pillow
'''
from PIL import Image
image = Image.open("test.jpg")
position = (320, 65, 460, 220)
cutjpg = image.crop(position).transpose(Image.ROTATE_180)
image.paste(cutjpg, position)
image.show()

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/6/11 21:51
# @Author  : yangyuanqiang
# @File    : demon6.py


'''python3 操作图片需要
pip install pillow
'''
from PIL import Image
image = Image.open("test.jpg")
position = (320, 65, 460, 220)
cutjpg = image.crop(position).transpose(Image.ROTATE_180)
image.paste(cutjpg, position)

(x, y) = image.size
newx = 30
newy = int(y*newx/x)
newimage = image.resize((newx, newy))
newimage.show()

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/6/11 21:52
# @Author  : yangyuanqiang
# @File    : demon7.py


import random
import string

from PIL import Image, ImageFont, ImageDraw, ImageFilter

font_path = "msyh.ttf"
number = 4
size = (100, 30)
bgcolor = (255, 255, 255)
fontcolor = (0, 0, 255)
linecolor = (255, 0, 0)
draw_line = True
# 加入干扰线条数的上下限
line_number = 30


#生成一个随机字符串

def getNumber():
    source = list(string.ascii_letters) + list(string.digits)
    return "".join(random.sample(source, number))

#绘制干扰线
def getLine(draw, width, height):
    begin = random.randint(0, width), random.randint(0, height)
    end  = random.randint(0, width), random.randint(0, height)
    draw.line([begin, end], fill=linecolor)

def getCode():
    width, height = size
    image = Image.new("RGBA", size, bgcolor)
    font = ImageFont.truetype(font_path, 25)
    draw = ImageDraw.Draw(image)
    text = getNumber()
    font_width, font_height = font.getsize(text)
    draw.text(((width - font_width) / 2, (height - font_height) / 2), text, font=font, fill=fontcolor)  # 填充字符串
    if draw_line:
        for i in range(line_number):
            getLine(draw, width, height)

    # image = image.transform((width + 20, height + 10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR)  # 创建扭曲
    image = image.filter(ImageFilter.EDGE_ENHANCE_MORE)  # 滤镜,边界加强
    image.save('idencode.png')  # 保存验证码图片
    # image.show()
if __name__ == '__main__':
    getCode()

 

posted @ 2018-06-11 22:03  Ivan_yyq  阅读(174)  评论(0编辑  收藏  举报