超级简单!使用Python去除图片和PDF的水印例如下图是从一个pdf文件中截取的。今天我们就用Python来解决这个问题。安装模块PIL:PythonImagingLibrary是python中一个非常强大的图像处理标准库,但是只能支持python2.7,所以有志愿者在PIL的基础上做了一个支持python3的pillow,并增加了一些新的特性。pipinstallpillowpymupdf可以使用python访问扩展名为*.pdf、.xps、.oxps、.epub、.cbz或*.fb2的文件。还支持许多流行的图像格式,包括多页TIFF图像。pipinstallPyMuPDF从PIL导入需要的模块importImagefromitertoolsimportproductimportfitzimportos获取图像的RGBpdf。学过计算机的朋友都知道,RGB在计算机中用来表示红绿蓝,(255,0,0)用来表示红色,(0,255,0)用来表示绿色,(0,0,255)用来表示蓝色,(255,255,255)表示白色,(0,0,0)表示黑色。去水印的原理是将水印的颜色改为白色(255、255、255)。先获取图片的宽高,使用itertools模块获取宽高的笛卡尔积,以像素为单位。每个像素的颜色由RGB的前三位和Alpha通道的第四位组成。不需要Alpha通道,只需要RGB数据。defremove_img():image_file=input("请输入图片地址:")img=Image.open(image_file)width,height=img.sizeforposinproduct(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。像素图有自己的RGB。只需要将pdf中水印中的RGB改为(255,255,255)最后保存为图片即可。defremove_pdf():page_num=0pdf_file=input("请输入pdf地址:")pdf=fitz.open(pdf_file);对于pdf中的页面:pixmap=page.get_pixmap()forposinproduct(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}watermarkremovalcompleted")page_num=page_num+1示例结果:imageConverttopdfImagetopdf需要注意的是图片的排序,数字文件名排序前必须先转换为int类型。用PyMuPDF模块打开图片后,使用convertToPDF()函数将图片转为单页pdf。插入到新的pdf文件中。defpic2pdf():pic_dir=input("请输入图片文件夹路径:")pdf=fitz.open()img_files=sorted(os.listdir(pic_dir),key=lambdax:int(str(x).split('.')[0]))forimginimg_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面前消失了。你们失学了吗?
