目录

  • 前言
  • 对比图(水印去除前后)
  • 一、原理
  • 二、代码实现
  • 三、使用教程
    • 1. 文件夹目录(pic和res文件夹需提前创建好)
    • 2. 执行第一步代码(注释掉其他代码,以下同理)
    • 3. 执行第二步代码
    • 4. 执行第三步代码
    • 5. 图片转PDF
  • 总结

前言

习惯用WPS的我发现,纯图PDF文件无法去除水印,所以我就用Python来去除PDF指定区域内的水印,主要就是纯色水印的处理,如果大家有什么更好的建议,请多多分享!

对比图(水印去除前后)


一、原理

  1. 将PDF拆成若干张图片,置于pic文件夹,并规律命名;
  2. 由于水印处在每张图片的相同位置,所以为了简化算法,我们可以只处理指定区域的像素;
  3. 对指定区域像素作判断,若是水印,则将其设为白色(255,255,255);
  4. 将修改后的图片输出到res文件夹内;
  5. 利用WPS将多个图片合成一个PDF。

二、代码实现

import fitz
import os
import cv2 as cv
import numpy as npdef func(doc):'''将pdf中所有图片写入文件夹'''for i in range(len(doc)):imglist = doc.getPageImageList(i)for j, img in enumerate(imglist):xref = img[0]pix = fitz.Pixmap(doc, xref)   # make pixmap from imageif pix.n - pix.alpha < 4:      # can be saved as PNGpix.writePNG("./pic/p%s.png" % (i + 1))else:                          # CMYK: must convert firstpix0 = fitz.Pixmap(fitz.csRGB, pix)pix0.writePNG("./pic/p%s.png" % (i + 1))pix0 = None                # free Pixmap resourcespix = None                     # free Pixmap resourcesprint('PDF拆分完毕')def console_location(path):"""控制台输出区域像素的位置"""img = cv.imread(path)def on_mouse(event, x, y, flags, param):if event == cv.EVENT_LBUTTONDOWN:print(x, y)  # 宽*高# 构建窗口# 回调绑定窗口cv.namedWindow("img", cv.WINDOW_NORMAL)cv.setMouseCallback("img", on_mouse, 0)cv.imshow("img", img)# 键盘输入'q'退出if cv.waitKey() == ord("q"):cv.destroyAllWindows()def remove(w_min, h_min, w_max, h_max, pixel_min, pixel_max):"""去除水印"""list_file = os.listdir('./pic')for filename in list_file:print('正在处理图片:' + filename)img = cv.imread('./pic/' + filename)for h in range(height_min, height_max):for w in range(width_min, width_max):# 像素读取顺序是BGR(b, g, r) = img[h, w]if (pixel_min < r < pixel_max and pixel_min < g < pixel_max and pixel_min < b < pixel_max):img[h, w] = [255, 255, 255]# 保存图片cv.imwrite("./res/" + filename, img)print('水印去除完毕')if __name__ == "__main__":# 注意:需要自行创建好pic和res的空文件夹# PDF和其中一个样例图片的路径pdf_path = 'file.pdf'pic_path = './pic/p1.png'# 需要滤除的区域像素值pixel_min = 150pixel_max = 255# 需要滤除的区域像素位置width_min = 149height_min = 770width_max = 850height_max = 862# 第一步:将pdf中所有图片写入文件夹# func(doc=fitz.open(pdf_path))# 第二步:获得水印区域像素的位置# console_location(pic_path)# 第三步:去除文件夹内所有图片指定范围的灰色区域remove(width_min, height_min, width_max, height_max, pixel_min, pixel_max)

三、使用教程

1. 文件夹目录(pic和res文件夹需提前创建好)

2. 执行第一步代码(注释掉其他代码,以下同理)

修改变量

    pdf_path = 'file.pdf'

3. 执行第二步代码

首先点击水印的左上方和用下方位置,得到水印部分的像素点位置。鼠标点击图片后,窗口会打印出(宽,高),按“q”退出。

修改变量

    width_min = 143height_min = 776width_max = 867height_max = 862

然后使用windows自带的画图软件,得到水印部分的颜色(像素值)。

  1. 因为这里我的水印是灰色的,所以RGB三色值相等,故阈值判断使用了相同变量;
  2. 因为我的文档正文并没有灰色的有用信息,所以我可以任意设置阈值上限,设为了255,设小了可能会有一些水印边缘残留。


修改变量

    pixel_min = 150pixel_max = 255

4. 执行第三步代码

5. 图片转PDF

得到去除水印的图片后,用WPS批量将其合成一个PDF文件(这里可能会有几张顺序不太对,不知道是什么原因,所以需要手动拖拽一下,将p1和p2拖到前面)。

参考博客: https://blog.csdn.net/qq_41251963/article/details/115306741
参考博客: https://blog.csdn.net/Cocktail_py/article/details/103004586


总结

这是我第一次写博客,感想呢就是像刚写完本科期间专业课的实验报告,看到这些规范的排版,特别有成就感,哈哈哈。
起初做这个小项目的目的是为了给女朋友去除她复习资料的水印的,因为她那个PDF文件全是图片,无法使用内部功能直接去水印,索性我就想用最近学习的Python来做这个事情,也算是第一次真正地拿来处理实际问题了。
做完这个项目之后,我才有了写博客的念头,我就是希望能够用编程来解决实际问题,记录下我能够用编程来做什么。也不知道以后多久能更一次,总之呢,只要是有实际用处的项目,无论难易程度如何,我肯定会努力去研究,如果研究明白了,我就会分享给大伙。
最近在备战考研,这一篇文章也算是个小插曲啦,有机会的话可以每天晚上研究一会,算作学习之后的放松时间。
以后研究方向应该会致力于图像处理相关的应用,属于目前自己比较感兴趣的方向吧。

最后,祝自己考研加油!!!

Python项目实践(一)去除PDF指定区域内的水印相关推荐

  1. Python项目实践之二:下载数据(CSV和JSON )

    Python项目实践之二:下载数据(CSV和JSON ) 下载数据的可视化着重点在于从网上下载数据进行分析后,进行可视化处理,网上的数据格式多的难以置信,且大多未经过仔细检查,如果能够对这些数据进行分 ...

  2. Python项目实践之三:添加 Play 按钮和提高游戏等级

    Python项目实践之三:添加 Play 按钮和提高游戏等级 现在外星人入侵游戏项目已经实现了武装飞船和外星人群的功能,本章主要添加一些辅助功能,如添加一个开始按钮,计分板信息和随着游戏的进行加快游戏 ...

  3. java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理

    java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...

  4. 获取指定区域内的坐标点位,在线查看经纬坐标

    获取指定区域内的坐标点 项目介绍 使用方法 仓库地址 项目介绍 基于 turfjs 库的很简单的封装,实现输入范围的多边形数据,返回指定坐标间隔的点位. 多边形数据可以从高德地图API获取,例如:(该 ...

  5. python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版

    给大家带来的一篇关于Python案例相关的电子书资源,介绍了关于Python.项目开发.Python案例方面的内容,本书是由吉林大学出版社出版,格式为PDF,资源大小99.1 MB,明日科技编写,目前 ...

  6. python项目实践_python实践项目

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 文章节选自<机器学习--python实践>文末评论赠送本书,欢迎留言 ...

  7. [软件工具][windows]pdf指定区域OCR识别重命名工具使用教程

    首先我们打开软件,界面如下: 如上图,使用非常简单,步骤如下: (1)选择工具-取模板选择一个pdf文件划定自己需要识别的区域,如果你选择第2页指定区域则软件统一识别所有pdf第2页指定区域 取模板截 ...

  8. 【教程】Spire.PDF教程:C# 从 PDF 页面的指定区域内提取文本

    Spire.PDF是一个专业的PDF组件,能够独立地创建.编写.编辑.操作和阅读PDF文件,支持 .NET.Java.WPF和Silverlight. [下载Spire.PDF最新试用版] 有时我们可 ...

  9. python项目实践之微信公众号历史文章批量下载

    项目: 有的微信公众号文章经常会被删或者和谐,所以想有个工具能一键导出公众号文章,正逢有想学python的想法,找到下面这个python项目: vWeChatCrawl-小V公众号文章下载(开源版) ...

最新文章

  1. 聚类 高维聚类 聚类评估标准 EM模型聚类
  2. 开源特训营 - Lesson 4 - 如何运营社区
  3. Microsoft发布.NET架构指南草案
  4. 漫谈 Linux,Windows 和 Mac
  5. php 红包生成算没法,红包生成算法的需求(PHP版本)
  6. 3星|《财经》2017年第29期:未来,国有资本的收益和变现都是补贴社保的渠道...
  7. 华为可折叠手机推迟发布;苹果获新专利可隔空操控iPhone;微软不放弃 IE | 极客头条...
  8. ModelForm操作
  9. (转)国外优秀区块链创业公司梳理
  10. c语言程序学生档案管理系统,C语言 班级档案管理系统实现
  11. python使用OpenCV-Python结合百度图像识别api实现图片中的文字识别
  12. VBS 对IBM Notes的常规操作
  13. 如何视频录制电脑里播放的视频
  14. 世界星载SAR发展5——SIR-C(1994,美国)
  15. [GKCTF 2021]excel 骚操作
  16. 安装iso格式的软件安装程序
  17. vuetify 学习第一天之v-data-table_表格组件
  18. Autodesk Alias AutoStudio 2022 x64
  19. UserGuide-i3wm默认绑定简明说明
  20. python量化交易笔记---13.描述性统计

热门文章

  1. Xilinx Zynq7000系列学习
  2. 办理护照(学生集体户口)
  3. 盘点史上最严重的的十大黑客袭击事件
  4. Java 格式化时间与时间戳与时间间隔
  5. php中array转json_php怎么实现数组转json
  6. TIFF影像的坐标文件.tfw
  7. 机器学习_周志华(西瓜书) 课后习题答案 第一章 Chapter1
  8. (9)调整图像的亮度和对比度
  9. Hash(哈希(字符串哈希))模板和做题总结(详细易懂)
  10. 为什么输入法显示中文打不出中文_搜狗输入法打不出中文怎么回事 打不出汉字解决办法...