请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
搜索
热搜: Excel discuz
查看: 2473|回复: 4

[项目代码] 抖音粉丝的PDF修改图片合集(包含PDF和png互相转换代码)

[复制链接]

482

主题

7万

元宝

75万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
750844
发表于 2022-3-24 20:15:33 | 显示全部楼层 |阅读模式
第一步,把所有PDF文件转成png图片格式
  1. import fitz
  2. import os
  3. def pdf2png(url):
  4.     name = []
  5.     path = []
  6.     i = 1
  7.     #在路径内搜索PDF文件,并加入列表,生成字典,键值对分别是文件名和文件路径
  8.     for lujing,liebiao,wenjian in os.walk(url):
  9.         for a in wenjian:
  10.             if a.endswith('pdf'):
  11.                 patha = lujing +'\\' +a
  12.                 path.append(patha)
  13.                 name.append(a)
  14.                 zidian = dict(zip(name,path))
  15.     #在字典内拿到文件名创建文件夹,然后转图片放到对应文件夹
  16.     for name,path in zidian.items():
  17.         lujing=path.replace('.pdf','')
  18.         if not os.path.exists(lujing):
  19.             os.mkdir(lujing)
  20.         #  打开PDF文件,生成一个对象
  21.         doc = fitz.open(path)
  22.         print(path,f'一共{doc.pageCount}页')
  23.         for pg in range(doc.pageCount):
  24.             page = doc[pg]
  25.             rotate = int(0)
  26.             # 每个尺寸的缩放系数为2,这将为我们生成分辨率提高两倍的图像。
  27.             zoom_x = 2.0
  28.             zoom_y = 2.0
  29.             trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
  30.             pm = page.getPixmap(matrix=trans, alpha=False)
  31.             pm.writePNG(lujing +'\\'+ '{:02}.png'.format(i))
  32.             i = i+1
  33.             print(f'第{i-1}页转换完成')
  34.         i = 1


  35. url = input('请输入文件夹地址:')
  36. pdf2png(url)
复制代码
运行后,输入大文件夹的路径即可,会循环遍历每个文件夹,然后将每个文件夹内的PDF文件,转换成png图片,并保存到对应名字的文件夹。



回复

使用道具 举报

482

主题

7万

元宝

75万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
750844
 楼主| 发表于 2022-3-24 20:16:42 | 显示全部楼层
第二步,把每个文件夹下的02.png图片删除,循环遍历每个文件夹,并拼接每个02.png的路径,然后循环路径,删除即可
  1. import os
  2. path = 'G:\多pdf裁切项目\级别5--图片\\'
  3. nlst = [path+v+'\\'+'02.png' for v in os.listdir(path)]
  4. for i in nlst:
  5.     os.remove(i)
  6.     print(i,'已经删除')
复制代码




回复

使用道具 举报

482

主题

7万

元宝

75万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
750844
 楼主| 发表于 2022-3-24 20:18:29 | 显示全部楼层
第三步,把第一张和最后两张图片移动到目标文件夹,剩余图片固定区域填充白色
  1. import numpy as np
  2. import os,shutil
  3. from PIL import Image

  4. def tianchong(url):
  5.     #新建文件夹,用来存储处理完的图片
  6.     if not os.path.exists(url + '-填充后'):
  7.         os.mkdir(url + '-填充后')

  8.     # 把不需要处理的三张图片,移动到目标文件夹
  9.     files = os.listdir(url)
  10.     changdu = len(files)
  11.     shutil.move(f"{url}\\01.png", url + '-填充后')
  12.     shutil.move(f'{url}\\{int(changdu)}.png', url + '-填充后')
  13.     shutil.move(f'{url}\\{int(changdu)+ 1}.png', url + '-填充后')

  14.     # 把所有文件遍历出来
  15.     files = [url+'\\'+v for v in os.listdir(url)]
  16.     # print(files)
  17.     for a in files:
  18.         newname = a.split('】')[0]+'】-填充后'+'\\'+a.split('\\')[-1]

  19.         # 开始处理图片
  20.         img = Image.open(a)
  21.         array = np.array(img)
  22.         rows = len(array)
  23.         cols = len(array[0])
  24.         # 图片尺寸
  25.         # print(rows)
  26.         # print(cols)
  27.         # 设置图片修改后图片颜色  作者这里设置为白色
  28.         colorl = [255,255,255]

  29.         # 依次遍历我们需要修改颜色的图片区域
  30.         for col in range(100, 870):
  31.             for row in range(830, 1060):
  32.                 array[row, col] = colorl
  33.         new_img = Image.fromarray(array)
  34.         # new_img.show()
  35.         new_img.save(newname)
  36.         print(a, '已经处理完毕')

  37. path = input('请输入文件夹地址:')

  38. A = os.listdir(path)
  39. for a in A:
  40.     tianchong(path+'\\'+a)
复制代码




回复

使用道具 举报

482

主题

7万

元宝

75万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
750844
 楼主| 发表于 2022-3-24 20:27:35 | 显示全部楼层
第四步,每个文件夹内的图片合成一个PDF文件
  1. import os
  2. import img2pdf
  3. def pngtopdf(path):
  4.     name = path + '.pdf'
  5.     with open(name, "wb") as f:
  6.         f.write(img2pdf.convert([os.path.join(path, file) for file in os.listdir(path) if file.endswith('.png')]))
  7. url = input('请输入文件夹地址:')
  8. A = os.listdir(url)
  9. for i in A:
  10.     pngtopdf(url+'\\'+i)
  11.     print(url+'\\'+i,'已经合成完毕')
复制代码




回复

使用道具 举报

482

主题

7万

元宝

75万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
750844
 楼主| 发表于 2022-3-24 20:31:13 | 显示全部楼层
补充一点,图片转PDF这个,目前只支持png图片,如果图片是jpg格式的话,用如下代码把jpg转成png

  1. from PIL import Image
  2. import os
  3. path = r'C:\Users\admin\Desktop\成品'
  4. for lujing,liebiao,wenjian in os.walk(path):
  5.     for i in wenjian:
  6.         j = lujing+'\\'+i    #获取所有文件的完整路径
  7.         name = i.split('.')[0]   #拿到每个文件的名字,去掉后缀名
  8.         im = Image.open(j)       #打开图片
  9.         im.save(f"{lujing}\{name}.png")     #保存到原目录,保存成png格式
  10.         print(j,'转换完成')
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|五花八门论坛 ( 豫ICP备15031300号-3 )

GMT+8, 2024-3-28 18:09 , Processed in 0.115590 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表