Python项目实践(一)去除PDF指定区域内的水印
目录
- 前言
- 对比图(水印去除前后)
- 一、原理
- 二、代码实现
- 三、使用教程
- 1. 文件夹目录(pic和res文件夹需提前创建好)
- 2. 执行第一步代码(注释掉其他代码,以下同理)
- 3. 执行第二步代码
- 4. 执行第三步代码
- 5. 图片转PDF
- 总结
前言
习惯用WPS的我发现,纯图PDF文件无法去除水印,所以我就用Python来去除PDF指定区域内的水印,主要就是纯色水印的处理,如果大家有什么更好的建议,请多多分享!
对比图(水印去除前后)
一、原理
- 将PDF拆成若干张图片,置于pic文件夹,并规律命名;
- 由于水印处在每张图片的相同位置,所以为了简化算法,我们可以只处理指定区域的像素;
- 对指定区域像素作判断,若是水印,则将其设为白色(255,255,255);
- 将修改后的图片输出到res文件夹内;
- 利用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自带的画图软件,得到水印部分的颜色(像素值)。
- 因为这里我的水印是灰色的,所以RGB三色值相等,故阈值判断使用了相同变量;
- 因为我的文档正文并没有灰色的有用信息,所以我可以任意设置阈值上限,设为了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指定区域内的水印相关推荐
- Python项目实践之二:下载数据(CSV和JSON )
Python项目实践之二:下载数据(CSV和JSON ) 下载数据的可视化着重点在于从网上下载数据进行分析后,进行可视化处理,网上的数据格式多的难以置信,且大多未经过仔细检查,如果能够对这些数据进行分 ...
- Python项目实践之三:添加 Play 按钮和提高游戏等级
Python项目实践之三:添加 Play 按钮和提高游戏等级 现在外星人入侵游戏项目已经实现了武装飞船和外星人群的功能,本章主要添加一些辅助功能,如添加一个开始按钮,计分板信息和随着游戏的进行加快游戏 ...
- java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理
java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...
- 获取指定区域内的坐标点位,在线查看经纬坐标
获取指定区域内的坐标点 项目介绍 使用方法 仓库地址 项目介绍 基于 turfjs 库的很简单的封装,实现输入范围的多边形数据,返回指定坐标间隔的点位. 多边形数据可以从高德地图API获取,例如:(该 ...
- python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版
给大家带来的一篇关于Python案例相关的电子书资源,介绍了关于Python.项目开发.Python案例方面的内容,本书是由吉林大学出版社出版,格式为PDF,资源大小99.1 MB,明日科技编写,目前 ...
- python项目实践_python实践项目
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 文章节选自<机器学习--python实践>文末评论赠送本书,欢迎留言 ...
- [软件工具][windows]pdf指定区域OCR识别重命名工具使用教程
首先我们打开软件,界面如下: 如上图,使用非常简单,步骤如下: (1)选择工具-取模板选择一个pdf文件划定自己需要识别的区域,如果你选择第2页指定区域则软件统一识别所有pdf第2页指定区域 取模板截 ...
- 【教程】Spire.PDF教程:C# 从 PDF 页面的指定区域内提取文本
Spire.PDF是一个专业的PDF组件,能够独立地创建.编写.编辑.操作和阅读PDF文件,支持 .NET.Java.WPF和Silverlight. [下载Spire.PDF最新试用版] 有时我们可 ...
- python项目实践之微信公众号历史文章批量下载
项目: 有的微信公众号文章经常会被删或者和谐,所以想有个工具能一键导出公众号文章,正逢有想学python的想法,找到下面这个python项目: vWeChatCrawl-小V公众号文章下载(开源版) ...
最新文章
- 聚类 高维聚类 聚类评估标准 EM模型聚类
- 开源特训营 - Lesson 4 - 如何运营社区
- Microsoft发布.NET架构指南草案
- 漫谈 Linux,Windows 和 Mac
- php 红包生成算没法,红包生成算法的需求(PHP版本)
- 3星|《财经》2017年第29期:未来,国有资本的收益和变现都是补贴社保的渠道...
- 华为可折叠手机推迟发布;苹果获新专利可隔空操控iPhone;微软不放弃 IE | 极客头条...
- ModelForm操作
- (转)国外优秀区块链创业公司梳理
- c语言程序学生档案管理系统,C语言 班级档案管理系统实现
- python使用OpenCV-Python结合百度图像识别api实现图片中的文字识别
- VBS 对IBM Notes的常规操作
- 如何视频录制电脑里播放的视频
- 世界星载SAR发展5——SIR-C(1994,美国)
- [GKCTF 2021]excel 骚操作
- 安装iso格式的软件安装程序
- vuetify 学习第一天之v-data-table_表格组件
- Autodesk Alias AutoStudio 2022 x64
- UserGuide-i3wm默认绑定简明说明
- python量化交易笔记---13.描述性统计