当前位置:   article > 正文

Python去水印操作_python 去水印

python 去水印

看到有很多去水印的资源,但是有的方程并不适合新的python,或者转化后的清晰度太低,所以在前人的代码上改了一下,让fitz打开时存储更多信息.至于如何确定水印RGB,推荐微信截图功能,在将pdf转换成图片时可以先查看一下,我转的pdf的水印大部分的RGB加起来是631,但是边缘还是会没被去除干净,所以也可以用>=而不是==。

  1. from itertools import product
  2. import fitz
  3. import os
  4. # 去除pdf的水印
  5. def remove_pdfwatermark():
  6. #打开源pfd文件,这里将pdf和python执行文件放在同一路径下
  7. pdf_file = fitz.open("1.pdf")
  8. #建构fitz提取文件矩阵
  9. zoom=2
  10. mat=fitz.Matrix(zoom, zoom)
  11. #page_no 设置为0
  12. page_no = 0
  13. #page在pdf文件中遍历
  14. for page in pdf_file:
  15. #获取每一页对应的图片pix (pix对象类似于我们上面看到的img对象,可以读取、修改它的 RGB)
  16. #page.get_pixmap() 这个操作是不可逆的,即能够实现从 PDF 到图片的转换,但修改图片 RGB 后无法应用到 PDF 上,只能输出为图片
  17. pix = page.get_pixmap(matrix=mat)
  18. #遍历图片中的宽和高,如果像素的rgb值总和等于631,就认为是水印,转换成255255,255-->即白色
  19. for pos in product(range(pix.width), range(pix.height)):
  20. if sum(pix.pixel(pos[0], pos[1])) == 631:
  21. pix.set_pixel(pos[0], pos[1], (255, 255, 255))
  22. #保存去掉水印的截图,在执行文件下新建名为png的文件夹
  23. pix.pil_save(f"./png/{page_no}.png", dpi=(30000, 30000))
  24. #打印结果
  25. print(f'第 {page_no} 页去除完成')
  26. page_no += 1
  27. if __name__ == '__main__':
  28. remove_pdfwatermark()
  29. #图片所在的文件夹
  30. pic_dir = 'png'
  31. pdf = fitz.open()
  32. #图片数字文件先转换成int类型进行排序
  33. img_files = sorted(os.listdir(pic_dir), key=lambda x: int(str(x).split('.')[0]))
  34. for img in img_files:
  35. print(img)
  36. imgdoc = fitz.open(pic_dir + '/' + img)
  37. #将打开后的图片转成单页pdf
  38. pdfbytes = imgdoc.convert_to_pdf()
  39. imgpdf = fitz.open("pdf", pdfbytes)
  40. #将单页pdf插入到新的pdf文档中
  41. pdf.insert_pdf(imgpdf)
  42. pdf.save("完成.pdf")
  43. pdf.close()

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/760153
推荐阅读
相关标签
  

闽ICP备14008679号