直播课 1-13 合并pdf文件 python处理图片

合并多个pdf文件为一个pdf文件

import PyPDF2
import os
#建立一个装pdf文件的数组
pdfFiles = []
for fileName in os.listdir('aming'):    #遍历该程序所在文件夹内的文件
    if fileName.endswith('.pdf'):   #找到以.pdf结尾的文件
        pdfFiles.append(fileName)   #将pdf文件装进pdfFiles数组内
# pdfFiles.sort()     #文件排序print(pdfFiles)
os.chdir("aming")
pdfWriter = PyPDF2.PdfFileWriter()     #生成一个空白的pdf文件
for fileName in pdfFiles:
    pdfReader = PyPDF2.PdfFileReader(open(fileName,'rb'))   #以只读方式依次打开pdf文件
    for pageNum in range(pdfReader.numPages):
        print(pdfReader.getPage(pageNum))
        pdfWriter.addPage(pdfReader.getPage(pageNum))    #将打开的pdf文件内容一页一页的复制到新建的空白pdf里
pdfOutput = open('combine.pdf','wb')     #生成combine.pdf文件
pdfWriter.write(pdfOutput)               #将复制的内容全部写入combine.pdf
pdfOutput.close()

python 处理图片

图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 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.

from PIL import Image

image = Image.open("1.jpg")
print(image.format, image.size, image.mode)
image.show()
结果:
JPEG (1080, 1920) RGB
并把图片打开,展示出来

Image的三个属性:

format : 识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值。

size : 返回的一个元组,有两个元素,其值为象素意义上的宽和高。

mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。
Image的方法介绍:
    show():显示最近加载的图像
    open(infilename):  打开文件
    save(outfilename):保存文件
    crop((left, upper, right, lower)):从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。

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 度角。

例子1:抠图

需求,把头像给截图出来:

from PIL import Image
image = Image.open("1.jpg")
print(image.format, image.size, image.mode)
box = (600, 300, 1050, 660)
region = image.crop(box)
region.save("cutting.jpg")

上述代码讲图片的((600, 300), (600, 660), (1050, 300), (1050, 660))所画出来的区域进行裁剪,并保存在cutting.jpg中

例子2:图片拼合

from PIL import Image
image = Image.open("1.jpg")
print(image.format, image.size, image.mode)
box = (600, 300, 1050, 660)
egion = image.crop(box)
#egion.save("cutting.jpg")
region = egion.transpose(Image.ROTATE_180)
image.paste(region, box)
image.show()

把头像照片截取出来,然后调换头像照片180度,然后在拼接在一起,

例子3:缩放:

from PIL import Image

infile = "2.jpg"
outfile = "new2.jpg"
image = Image.open(infile)
(x, y) = image.size
newx = 300
newy = int(y*newx/x)
out = image.resize((newx, newy), Image.ANTIALIAS)
out.show()

例子4:验证码

import random
import string
import sys
import math
from PIL import Image, ImageDraw, ImageFont, 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 = 20


# 用来随机生成一个字符串
def gene_text():
    source = list(string.ascii_letters)
    for index in range(0, 10):
        source.append(str(index))
    return ''.join(random.sample(source, number))  # number是生成验证码的位数


# 用来绘制干扰线
def gene_line(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 gene_code():
    width, height = size  # 宽和高
    image = Image.new('RGBA', (width, height), bgcolor)  # 创建图片
    font = ImageFont.truetype(font_path, 25)  # 验证码的字体
    draw = ImageDraw.Draw(image)  # 创建画笔
    text = gene_text()  # 生成字符串
    font_width, font_height = font.getsize(text)
    draw.text(((width - font_width) / number, (height - font_height) / number), text, font=font, fill=fontcolor)  # 填充字符串
    if draw_line:
        for i in range(line_number):
            gene_line(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__":
    gene_code()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值