欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
PDF文件转换成一个个的图片
下面展示一些 内联代码片
。
def ex_img(file): # file 是文件路径+文件名,从pdf中提取图片,实现水印去除
"""
:param file: PDF文件路径
:return:
提取的图片地址位于原PDF地址+img文件夹内
"""
print('图片提取开始')
(filepath, tempfilename) = os.path.split(file)
export_file = filepath + '\\img'
mkdir(export_file)
doc = fitz.open(file)
temp = 0
for pg in range(doc.pageCount):
page = doc[pg]
temp += 1
rotate = int(0)
# 每个尺寸的缩放系数为2,这将为我们生成分辨率提高四倍的图像。
zoom_x = 2.0
zoom_y = 2.0
trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
pm = page.getPixmap(matrix=trans, alpha=False)
pic_name = '{}.jpg'.format(temp)
# 拼接生成pdf的文件路径
pic_pwd = os.path.join(export_file, pic_name)
pm.writePNG(pic_pwd)
de_water(pic_pwd) #去图片水印
print('图片提取+去水印完成')
对图片内的水印去除
先简单介绍下计算机里关于颜色的知识。光学三原色是红绿蓝(RGB),也就是说它们是不可分解的三种基本颜色,其他颜色都可以通过这三种颜色混合而成,三种颜色等比例混合就是白色,没有光就是黑色。
在计算机中,可以用三个字节表示 RGB 颜色,1个字节能表示的最大数值是 255, 所以,(255, 0, 0)代表红色,(0, 255, 0)代表绿色,(0, 0, 255)代表蓝色。相应地,(255, 255, 255)代表白色,(0, 0, 0)代表黑色。从(0, 0, 0) ~ (255, 255, 255) 之间的任意组合都可以代表一个不同的颜色。
其实用到这里就是颜色越浅,RGB的数值越大
下面展示一些 内联代码片
。
# 去除图片里的水印
def de_water(jpg_file):
img = Image.open(jpg_file)
# print(img)
width, height = img.size # 图片长宽
# 读取图片的RGB,,读取长宽方向的每一个像素
for i in range(width):
for j in range(height):
pos = (i, j)
# print(img.getpixel(pos)[:3]) # 图片每个位置颜色由四元组表示,前三位分别是 RGB,第四位是 Alpha 通道,我们不需要关心。
if sum(img.getpixel(pos)[:3]) >= jpg_num and sum(img.getpixel(pos)[:3]) < 765: # 一般水印的颜色会淡于页面内容,颜色越淡,RGB越大
# print(img.getpixel(pos)[:3])
img.putpixel(pos, (255, 255, 255)) # 将水印的颜色变为白色
img.save('D:\\tool\\python 代码\\panpdf_v1.6\\De watermark\\img\\watermark_removed_pic.png')
将图片转换成PDF
def create_pdf(src): # 将单个的图片转为pdf
"""
:param src: 原文件地址
:param dst: 新文件地址,若想在原文件上修改,设置dst = src
:return:
"""
print('pdf创建开始')
# 大概改了改,没看具体实现。此处是为了将指定文件夹下得图片合并为pdf
(filepath, tempfilename) = os.path.split(src)
part_file = filepath + '\\img' # ex_img 中pdf转成图片后存放的地址,调整图片大小后的位置
pdf_part_file = filepath + '\\pdf'
mkdir(pdf_part_file)
img_open_list = [] # 创建打开后的图片列表
for root, dirs, files in os.walk(part_file):
for i in natsorted(files):
file = os.path.join(root, i) # 遍历所有图片,带绝对路径
img_open = Image.open(file) # 打开图片
if img_open.mode != 'RGB': # and int(i.replace('t_','').replace('.png','')) > 300:
# print(i)
img_open = img_open.convert('RGB') # 转换图像模式
img_open.save(pdf_part_file + "\\t_{}.pdf".format(i), "PDF", resolution=100.0, save_all=True)
print('pdf创建成功')
def join(otherpath, pdf_writer): # 给原文档加入指定文件页面
'''
:param otherpath: 插入的文件路径
:param pdf_writer: PdfFileWriter(),打开pdf文件
:return:
'''
pdf_reader = PdfFileReader(otherpath) # 要插入的文档path路径
for page in range(pdf_reader.getNumPages()): # 在文档开头加入
# 把每张PDF页面加入到这个可读取对象中
pdf_writer.addPage(pdf_reader.getPage(page))
def makePdf(src, dst): # src 应该是临时存放pdf的路径+文件名.pdf,out_file是输出路径+文件名.pdf
print('pdf合并开始')
(filepath, tempfilename) = os.path.split(src)
t = 0 # 用来计数pdf的位置
pdf_part_file = filepath + '\\pdf'
for root, dirs, files in os.walk(pdf_part_file):
for i in natsorted(files):
file = os.path.join(root, i) # 遍历所有pdf,带绝对路径
if t == 0: # 打开第一个pdf文件,把后续文件添加到第一个文件
pdf = PdfFileReader(file)
pdf_writer = PdfFileWriter()
pdf_writer.addPage(pdf.getPage(0)) # 每个pdf文件只有1页
else:
join(file, pdf_writer)
t += 1
with open(dst, 'wb') as output_pdf: # 写入
pdf_writer.write(output_pdf)
print('pdf合并完成')