网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读。比如下面的图片就是在 pdf 文件上截取出来的。

安装模块

PIL:Python Imaging Library 是 python 上非常强大的图像处理标准库,但是只能支持 python 2.7,于是就有志愿者在 PIL 的基础上创建了支持 python 3的 pillow,并加入了一些新的特性。

pip install pillow

pymupdf 可以用 python 访问扩展名为*.pdf、.xps、.oxps、.epub、.cbz或*.fb2的文件。还支持了许多流行的图像格式,包括多页TIFF图像。

pip install PyMuPDF

导入需要用到的模块

from PIL import Image
from itertools import product
import fitz
import os

获取图片的 RGB

pdf 去水印的原理和图片去水印的原理差不多,小编先从去除上面那张图片的水印开始。

学过计算机的小伙伴们都知道 ,计算机中用 RGB 代表红绿蓝,用 (255, 0, 0) 表示红色,(0, 255, 0) 表示绿色,(0, 0, 255) 表示蓝色,(255, 255, 255) 表示白色,(0, 0, 0) 表示黑色,去水印的原理就是将水印的颜色变成白色(255, 255, 255)。

首先获取图片宽和高,用 itertools 模块获取宽和高的笛卡尔积作为像素点。每个像素点的颜色都由 前三位的 RGB 和 第四位的 Alpha 通道构成。Alpha 通道不需要,只要 RGB 数据。

def remove_img():image_file = input("请输入图片地址:")img = Image.open(image_file)width, height = img.sizefor pos in product(range(width), range(height)):rgb = img.getpixel(pos)[:3]print(rgb)

图片去水印

用微信截图的方式查看水印像素点的 RGB。

可以看到水印的 RGB 是 (210, 210, 210),这里用 RGB 的和超过 620 就判定是水印点,此时将像素颜色替换为白色。最后保存图片。

rgb = img.getpixel(pos)[:3]
if(sum(rgb) >= 620):img.putpixel(pos, (255, 255, 255))img.save('d:/qsy.png')

示例结果:

PDF 去水印

PDF 去水印的原理和图片去水印的原理大致相同,用 PyMuPDF 打开 pdf 文件后,将 pdf 的每一页都转换为图片 pixmap,pixmap 有它自己的 RGB,只需要将 pdf 水印中的 RGB 改为(255, 255, 255) 最后保存为图片。

def remove_pdf():page_num = 0pdf_file = input("请输入 pdf 地址:")pdf = fitz.open(pdf_file);for page in pdf:pixmap = page.get_pixmap()for pos in product(range(pixmap.width), range(pixmap.height)):rgb = pixmap.pixel(pos[0], pos[1])if(sum(rgb) >= 620):pixmap.set_pixel(pos[0], pos[1], (255, 255, 255))pixmap.pil_save(f"d:/pdf_images/{page_num}.png")print(f"第{page_num}水印去除完成")page_num = page_num + 1

示例结果:

图片转为 pdf

图片转 pdf 需要注意的是图片的排序,数字文件名必须先转换为 int 类型后排序。用 PyMuPDF 模块打开图片后将图片用 convertToPDF() 函数转成单页的 pdf。插入到新的 pdf 文件中。

def pic2pdf():pic_dir = input("请输入图片文件夹路径:")pdf = fitz.open()img_files = sorted(os.listdir(pic_dir),key=lambda x:int(str(x).split('.')[0]))for img in img_files:print(img)imgdoc = fitz.open(pic_dir + '/' + img)  pdfbytes = imgdoc.convertToPDF()   imgpdf = fitz.open("pdf", pdfbytes)pdf.insertPDF(imgpdf)       pdf.save("d:/demo.pdf")         pdf.close()

总结

pdf 和图片上恼人的水印终于可以在强大的 python 面前消失了。小伙伴们学会了吗?

利用Python使图片完美去除水印,我想试试马赛克的效果∧v∧相关推荐

  1. 黑科技编程开发,利用Python使图片完美去除水印

    网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读.比如下面的图片就是在 pdf 文件上截取出来的. 安装模块 PIL:Python Imaging Library 是 python 上非常强 ...

  2. python 添加半透明水印_如何利用python给图片添加半透明水印

    前言 本文主要给大家介绍了关于python图片添加半透明水印的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 示例代码: # coding:utf-8 from PIL im ...

  3. python 添加半透明水印_怎么利用python给图片添加半透明水印

    前言 本文主要给大家简介了关于python图片添加半透明水印的相关资料,共享出来供大家参考学习,下面话不多说了,来一起看看具体的简介吧 示例代码: # coding:utf-8 from PIL im ...

  4. 利用python改图片为任意颜色

    一.利用到的库 利用python改变图片颜色的实现主要依靠pillow模块.Python的版本和pillow的版本对应是相对来说最容易使人混乱地方. 版本对应如下: 利用pycharm下载对应pill ...

  5. 【Python例】利用 python 进行图片文字信息的提取 --- OCR-EasyOCR

    [Python例]利用 python 进行图片文字信息的提取 - OCR-EasyOCR 本文主要用于记录,并使用 python 脚本进行图片文字信息的生成. 什么是 OCR? OCR OCR(Opt ...

  6. pythonmat文件转excel,利用python将图片转换成excel文档格式

    前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...

  7. 怎样用python生成中文字符画_如何利用Python实现图片转字符画详解

    本篇文章主要介绍了Python实现图片转字符画的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 字符画真的很有意思,将图片中的像素用字符代替,就生成了字符画. 但是像 ...

  8. pythonmat文件转excel_利用python将图片转换成excel文档格式详解

    本文主要介绍了关于利用python将图片转换成excel文档的相关内容,编写了一小段Python代码,将图片转为了Excel,纯属娱乐,下面这篇文章主要给大家介绍了关于利用python将图片转换成ex ...

  9. python读取图片文字为表格_利用python将图片转换成excel文档格式

    前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...

  10. python将excel转换成图片格式_利用python将图片转换成excel文档格式

    前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...

最新文章

  1. 原创《SQL基础知识第2版》PDF高清版,限时下载!
  2. 使用vue-amap
  3. iphone UITableView及UIWebView的使用
  4. 图片预览------photoswipe 使用
  5. 第二次裸辞_潜伏期_一些感想
  6. 农信社计算机知识,农信社备考:计算机基础知识(15)
  7. ps cc 生成html,使用photoshop生成网页的方法
  8. 2017.8.15 数据库
  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-4.后端项目分层分包及资源文件处理...
  10. 关于SVN状态图标不显示的解决办法(史上最全)
  11. 爬虫教程( 1 ) --- 初级、基础、实践
  12. CISP考试真题,CISP测试题
  13. SpringCloud第十章zuul路由网关
  14. 高斯混合模型(GMM),c++实现
  15. 不动产租赁运营平台,为不动产租赁提供强劲的运营支持
  16. C++文件服务器项目—FastCGI—4
  17. 做程序界中的死神,提升灵力上限
  18. mac系统和windows系统都有哪些不同
  19. [附源码]JSP+ssm计算机毕业设计大媛小南美味佳肴网站8p0nh【源码、数据库、LW、部署】
  20. 哈哈哈 记录一下此刻的小激动

热门文章

  1. 论文格式修改之英文摘要
  2. 《菜根谭》原文附译文
  3. SAP PM快速指南
  4. Npoi 导出word控制表格水平居中
  5. 生信分析矫正P值_万字长文+诚意满满 | 单细胞转录组分析最佳思路综述
  6. android手机备份恢复出厂设置,安卓手机恢复出厂设置在哪里?史上最全版恢复过程详解...
  7. ArcGIS中裁剪(clip)出现000117错误的解决办法
  8. java 把客户信息录入数组,需求说明 java-实现添加客户信息 客户信息包括:姓名、年龄、是否有会员卡...
  9. 基本社会里模型的源码分析
  10. 【Debug系列】ImportError: No module named ‘_tkinter‘