欢迎来到思维库

思维库

超简单!用 Python 为图片和 PDF 去掉水印

时间:2025-11-05 15:54:31 出处:应用开发阅读(143)

网上下载的超简 pdf 学习资料有一些会带有水印,非常影响阅读。单用掉水比如下面的为图图片就是在 pdf 文件上截取出来的,今天我们就来用Python解决这个问题。片和

安装模块

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.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 面前消失了。小伙伴们学废了吗?

分享到:

上一篇:今天,我们将向你展示如何在你的 Ubuntu 个人电脑或 Ubuntu 服务器中,直接通过 Ubuntu 官方软件仓库来配置本地软件仓库。在你的电脑中创建一个本地软件仓库有着许多的好处。假如你有许多电脑需要安装软件 、安全升级和修复补丁,那么配置一个本地软件仓库是一个做这些事情的高效方法。因为,所有需要安装的软件包都可以通过快速的局域网连接从你的本地服务器中下载,这样可以节省你的网络带宽,降低互联网接入的年度开支 ...你可以使用多种工具在你的本地个人电脑或服务器中配置一个 Ubuntu 的本地软件仓库,但在本教程中,我们将为你介绍 APT-Mirror。这里,我们将把默认的镜像包镜像到我们本地的服务器或个人电脑中,并且在你的本地或外置硬盘中,我们至少需要 120 GB 或更多的可用空间才行。 我们可以通过配置一个 HTTP 或 FTP 服务器来与本地系统客户端共享这个软件仓库。我们需要安装 Apache 网络服务器和 APT-Mirror 来使得我们的工作得以开始。下面是配置一个可工作的本地软件仓库的步骤:1. 安装需要的软件包我们需要从 Ubuntu 的公共软件包仓库中取得所有的软件包,然后在我们本地的 Ubuntu 服务器硬盘中保存它们。首先我们安装一个Web 服务器来承载我们的本地软件仓库。这里我们将安装 Apache Web 服务器,但你可以安装任何你中意的 Web 服务器。对于 http 协议,Web 服务器是必须的。假如你需要配置 ftp 协议 及 rsync 协议,你还可以再分别额外安装 FTP 服务器,如 proftpd, vsftpd 等等 和 Rsync 。复制代码代码如下:$ sudo apt-get install apache2然后我们需要安装 apt-mirror:复制代码代码如下:$ sudo apt-get install apt-mirror 注: 正如我先前提到的,我们需要至少 120 GB 的可用空间来使得所有的软件包被镜像或下载。2. 配置 APT-Mirror现在,在你的硬盘上创建一个目录来保存所有的软件包。例如,我们创建一个名为 /linoxide的目录,我们将在这个目录中保存所有的软件包:复制代码代码如下:$ sudo mkdir /linoxide现在,打开文件 /etc/apt/mirror.list :复制代码代码如下:$ sudo nano /etc/apt/mirror.list复制下面的命令行配置到 mirror.list文件中并按照你的需求进行修改:复制代码代码如下: ############# config ################## # set base_path /linoxide # # set mirror_path $base_path/mirror # set skel_path $base_path/skel # set var_path $base_path/var # set cleanscript $var_path/clean.sh # set defaultarch # set postmirror_script $var_path/postmirror.sh # set run_postmirror 0 set nthreads 20 set _tilde 0 # ############# end config ############## deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse #deb http://archive.ubuntu.com/ubuntu trusty-proposed main restricted universe multiverse #deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu trusty-proposed main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse clean http://archive.ubuntu.com/ubuntu 注: 你可以将上面的官方镜像服务器网址更改为离你最近的服务器的网址,可以通过访问 Ubuntu Mirror Server来找到这些服务器地址。假如你并不太在意镜像完成的时间,你可以沿用默认的官方镜像服务器网址。这里,我们将要镜像最新和最大的 Ubuntu LTS 发行版 --- 即 Ubuntu 14.04 LTS (Trusty Tahr) --- 的软件包仓库,所以在上面的配置中发行版本号为 trusty 。假如我们需要镜像 Saucy 或其他的 Ubuntu 发行版本,请修改上面的 trusy 为相应的代号。现在,我们必须运行 apt-mirror 来下载或镜像官方仓库中的所有软件包。复制代码代码如下:sudo apt-mirror从 Ubuntu 服务器中下载所有的软件包所花费的时间取决于你和镜像服务器之间的网络连接速率和性能。这里我中断了下载,因为我已经下载好了 ...3.配置网络服务器为了使得其他的电脑能够访问这个软件仓库,你需要一个Web服务器。你也可以通过 ftp 来完成这件事,但我选择使用一个Web服务器因为在上面的步骤 1 中我提及到使用Web服务器。因此,我们现在要对 Apache 服务器进行配置:我们将为我们本地的软件仓库目录 建立一个到 Apache 托管目录 --- 即 /var/www/ubuntu --- 的符号链接。复制代码代码如下:$ sudo ln -s /linoxide /var/www/ubuntu $ sudo service apache2 start上面的命令将允许我们从本地主机(localhost) --- 即 http://127.0.0.1(默认情况下) --- 浏览我们的镜像软件仓库。4. 配置客户端最后,我们需要在其他的电脑中添加软件源,来使得它们可以从我们的电脑中取得软件包或软件仓库。为达到此目的,我们需要编辑 /etc/apt/sources.list 文件并添加下面的命令:复制代码代码如下: $ sudo nano /etc/apt/sources.list添加下面的一行到/etc/apt/sources.list中并保存。复制代码代码如下: deb http://192.168.0.100/ubuntu/ trusty main restricted universe注: 这里的 192.168.0.100 是我们的服务器电脑的局域网 IP 地址,你需要替换为你的服务器电脑的局域网 IP 地址复制代码代码如下:$ sudo apt-get update最终,我们完成了任务。现在,你可以使用sudo apt-get install packagename 命令来从你的本地 Ubuntu 软件仓库中安装所需的软件包,这将会是高速的且消耗很少的带宽。

下一篇:摆摊贴膜市场(摆摊贴膜市场现状及发展趋势)

温馨提示:以上内容和图片整理于网络,仅供参考,希望对您有帮助!如有侵权行为请联系删除!

友情链接: