黑科技编程开发,利用Python使图片完美去除水印
off999 2024-10-29 14:57 44 浏览 0 评论
网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读。比如下面的图片就是在 pdf 文件上截取出来的。
安装模块
私信小编01即可获取大量Python学习资源
PIL:Python Imaging Library 是 python 上非常强大的图像处理标准库,但是只能支持 python 2.7,于是就有志愿者在 PIL 的基础上创建了支持 python 3的 pillow,并加入了一些新的特性。
pip install pillowpymupdf 可以用 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.size
for 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 = 0
pdf_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 面前消失了。小伙伴们学会了吗?
相关推荐
- 迅雷7苹果官方下载(迅雷官方下载苹果最新版本)
-
1、建议您在迅雷软件主界面右上角点击倒三角,在菜单中进入迅雷下载诊断工具,诊断下是否有浏览器支持相关的问题。2、在浏览器管理加载项里面看下是否开启了迅雷下载支持,如未启用请点击启用即可。3、可能是在安...
- 在线设计logo商标免费(logo在线设计网)
-
你好,注册费用按类别按个数收取,每类每个商标费用:1、一般商标每件300元(十年有效期,含十年的费用,国内公司或个人,其中国家规费300元);2、代理机构网报一般商标每件1000元(十年有效期,含十年...
- 如何快速学会ps软件(怎么学好ps软件,会简单的就好)
-
1.Photoshop只是一个工具而已,不要想的那么难2.基础是让你们最容易忽略的,但是必须牢固3.多去分析优秀作品,总结经验,技巧4.看作品尝试用不同的方法制作5.不需掌握PS所有功能,熟悉和工作相...
- 三国群雄传(三国群雄传2)
-
三国群英传2游戏中,分为五个时期,每个时期的君主数量不等,但主角还是曹操、孙权、刘备,几乎这三人在几个时期都是需要励精图治的时期。而刘备是很多人同情的一个贤明君主,因为从三国开端到三足鼎立时期,刘备都...
- 360官网电脑版(360官方网页)
-
http://hao.360.cn/360导航--一个主页,整个世界,为用户提供门户、新闻、视频、游戏、小说、彩票等各种分类的优秀内容和网站入口,提供简单便捷的上网导航服务。1.不是官方网站。2....
- nba免费直播高清jrs免(nba直播在线观看高清jrs)
-
由于美国和中国之间贸易战的原因,和火箭总裁的出言不逊,导致中国和NBA的播放停止。所以不能观看,等到后期和解后可以继续观看!祝你好运!有高清的,看NBA还是挺好的。方法一:JRS直播1、JRS直播是一...
- pc游戏模拟器(pc游戏模拟器推荐)
-
目前,PC游戏模拟器中最受欢迎和认可的是著名的BlueStacks。它是一款免费的安卓模拟器,可以在电脑上运行各种安卓游戏和应用程序。BlueStacks具有卓越的性能和稳定性,提供了流畅的游戏体验,...
- 炉石传说手游官网下载(炉石传说手游官网下载国服)
-
要下载炉石传说端游,可前往该游戏的官方网站或Blizzard官网,从中下载安装程序并安装。同时,玩家也可在国内的一些游戏下载网站上下载该游戏的安装包,但需保证其来源可靠。另外,在下载安装游戏时,可根据...
- 中信建投证券手机版下载(中信建投证券手机版下载什么软件)
-
不好退。1.中信建投证券app是一种金融工具,下载使用后就是用于完成交易和管理投资的,因此一旦下载就意味着启动了使用过程,是不可以退掉的。2.一些软件商店对于使用了特定时间的软件才可以退款,但是中...
- cad破解版在哪里下载(cad破解版怎么下载怎么安装)
-
如果你下载软件的时候,有提示是敲诈的病毒,那么有可能是因为你在下载软件的时候,不是正规渠道下载的,所以你下载的软件会带有病毒,你可以去电脑管家里面找到你的杀毒软件,来对你下载的软件进行病毒的查杀,你也...
- 游戏厅所有老游戏大全(老版游戏厅)
-
这个答案太多了现在比较普遍的应该是:拳皇系列(97,98为主)三国战纪系列,合金弹头系列,飞机系列等等别名:暴风小子、街头风雨用MAME模拟器可以玩到KOF系列的啊,94、95、96、97、98、...
- 163免费邮箱入口(163免费邮箱入口官网)
-
手机163的登录入口163邮箱官网入口是;https://smart.mail.163.com/login.htm网易邮箱注册方法;1在浏览器搜索“网易邮箱”。2进入网易邮箱官网https://sma...
- 一笔签名设计免费版(设计自己的签名免费版)
-
我国法律没有规定签名时要求一笔一划的写,因此,怎么签名这是公民的自由,合同方式协商一致即可。 但是,在实践中,双方当事人签合同时,建议写工整,能让他人认识签名的是谁,另外,最好在名字上按个手印,...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
