黑科技编程开发,利用Python使图片完美去除水印
off999 2024-10-29 14:57 43 浏览 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 面前消失了。小伙伴们学会了吗?
相关推荐
- 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...
- 一笔签名设计免费版(设计自己的签名免费版)
-
我国法律没有规定签名时要求一笔一划的写,因此,怎么签名这是公民的自由,合同方式协商一致即可。 但是,在实践中,双方当事人签合同时,建议写工整,能让他人认识签名的是谁,另外,最好在名字上按个手印,...
- win10正式版下载官网(win10官网免费下载)
-
先看系统之家之类的系统盘网站提供的系统盘文件,都是Ghost系统盘。所有的Ghost系统盘都是网络上的电脑系统高手以Ghost系统映像文件为基础制作的系统安装盘,在必要的windows安装系统的基础...
- adobe indesign(adobe indesign 下载)
-
在InDesign中,您可以通过使用数据合并功能来快速导入全年日历。首先,您需要准备一个包含所有日期和相应格式的数据表格,然后在InDesign中创建一个日历模板。接下来,使用数据合并功能将数据表格与...
- qq32位版本下载官方(qq3.3.3版本下载)
-
1152活跃天。QQ等级升级需要的活跃天数和自然的日是完全不同的,活跃天并不等于自然天数。活跃天是需要满足加速条件后才能获得的,相当于某些业务的成长值,经验值等,QQ等级由四个标识图展示,从低到高分别...
- 最新版本qq手机版下载安装免费
-
你说的是下载QQ软件吗?现在手机应用市场里都有QQ软件下载的,或者直接百度也可以。不用。苹果手机在appstore里下载手机qq步骤如下:1.在苹果手机中打开自带的AppStore软件进入;2.按...
- 全国34个卫视频道(全国34个卫视频道节目单)
-
全国卫视频道不止34个。全国各地28大省级卫视:北京卫视·天津卫视·河北卫视·山西卫视·内蒙古卫视·辽宁卫视·吉林卫视·黑龙江卫视·江苏卫视·浙江卫视·安徽卫视·江西卫视·山东卫视·河南卫视·湖北卫视...
- 福昕pdf阅读器电脑版(福昕pdf阅读器电脑版怎么用)
-
这是因为你的pdf文件没有与福昕阅读器进行关联。你如果要想双击pdf文档后使用福昕阅读器打开,可以这样设置一下::选中pdf文档,右击鼠标,在快捷菜单中点击属性。点击“属性”对话框中“打开方式”右边的...
- 快吧游戏官网(快吧游戏中心)
-
1.快吧游戏可以通过官方网站或应用商店进行下载。2.官方网站提供了游戏的下载链接,也可以通过扫描二维码进行下载。快吧游戏是一款手机游戏,可以在应用商店中下载安装。以下是在iOS和Android系统...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- 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)
