作为一名.net开发,python小白
在做一个小项目的时候遇到一个问题,想要将一些图片做去水印处理,然后想网上找.net去水印的方案,奈何苦苦寻找终究无果,然后去看看Python,一找就找到了
学过计算机的小伙伴们都知道 ,计算机中用 RGB 代表红绿蓝,用 (255, 0, 0) 表示红色,(0, 255, 0) 表示绿色, (0, 0, 255) 表示蓝色,(255, 255, 255) 表示白色,(0, 0, 0) 表示黑色, 去水印的原理就是将水印的颜色变成白色(255, 255, 255)。 首先获取图片宽和高,用 itertools 模块获取宽和高的笛卡尔积作为像素点。 每个像素点的颜色都由 前三位的 RGB 和 第四位的 Alpha 通道构成。Alpha 通道不需要,只要 RGB 数据。
下面是实现代码
"""
安装模块
pillow
pymupdf
pymupdf 可以用 python 访问扩展名为*.pdf、.xps、.oxps、.epub、.cbz或*.fb2的文件。
还支持了许多流行的图像格式,包括多页TIFF图像。
"""
from PIL import Image
from itertools import product
import fitz
import os
import re
import fnmatch
"""
去除图片水印
:return:
"""
# image_file = input("请输入图片地址:")
image_file = "water.png"
img = Image.open(image_file)
width, height = img.size
"""
product 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即:
product(A, B) 和 ((x,y) for x in A for y in B)的效果是一样的。
>>> A = [1, 2, 3]
>>> B = [100, 200]
>>> for item in product(A, B):
... print(item)
(1, 100)
(1, 200)
(2, 100)
(2, 200)
(3, 100)
(3, 200)
"""
for pos in product(range(width), range(height)):
rgb = img.getpixel(pos)[:3] # 得到图片RGB
"""
通过微信图片截取
可以看到水印的 RGB 是 (220, 220, 220),这里用 RGB 的和超过 660 就判定是水印点,此时将
像素颜色替换为白色。最后保存图片
"""
if sum(rgb) >= 660:
img.putpixel(pos, (255, 255, 255))
img.save('eliminate_water.png')
主要就是安装依赖的一些步骤
Step1:pip install pillow
Step2:? ?pip install fitz
Step3:??pip install PyMuPDF
然后运行就可以了
|