mrliu133 发表于 2021-11-25 19:29

【Python】一键去除图片水印,含简单可视化界面

本帖最后由 mrliu133 于 2021-11-25 19:34 编辑

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@file    :   RWM.py
@Time    :   2021/11/25 19:25:55
@AuThor:   Ljujl
@version :   1.0
@Contact :   mr_liu133299@foxmail.com
'''

# here put the import lib

from os import path
from tkinter import (BOTH, BROWSE, EXTENDED, INSERT, Button, Frame, Label,
                     Text, Tk, filedialog, mainloop, messagebox)
from PIL import Image, ImageTk


class Remove_watermark():
    def __init__(self) -> None:

      self.root = Tk()
      self.root.title("去水印大师")
      x = (self.root.winfo_screenwidth() - self.root.winfo_reqwidth()) // 4
      y = (self.root.winfo_screenheight() - self.root.winfo_reqheight()) // 4
      self.root.geometry(f"{x}x{y}")
      self.frame = Frame(self.root).grid(row=0, column=0)
      self.old_pic_frame = Frame(self.root).grid(row=1, column=0)
      self.new_pic_frame = Frame(self.root).grid(row=1, column=1)
      self.width = 10
      btn_open = Button(self.frame, text="打开图片", width=self.width, height=1, command=self.open_pic,).grid(
            row=0, column=0)#
      label_white = Label(self.frame, text="", height=1, width=self.width).grid(
            row=0, column=1)
      btn_process = Button(self.frame, text="角落水印", width=self.width, height=1, command=self.process,).grid(
            row=0, column=2)#
      label_white = Label(self.frame, text="", height=1, width=self.width).grid(
            row=0, column=3)
      btn_process = Button(self.frame, text="文档水印", width=self.width,
                           height=1, command=self.process_all,).grid(row=0, column=4)

    def open_pic(self):
      global img
      self.screenwidth = self.root.winfo_screenwidth()
      self.screenheight = self.root.winfo_screenheight()
      self.root.geometry(
            f"{self.screenwidth}x{self.screenheight}+0+0")
      self.filepath = filedialog.askopenfilename(title='选择图片', filetypes=[
            ('图片', ['*.jpg', '*.png', '*.gif'])])
      img_open = Image.open(fp=self.filepath).convert("RGB")
      self.img_width, self.img_height = img_open.size
      print(self.img_width, self.img_height)
      self.rate = self.img_width / self.img_height
      # 如果图片高度过高则进行缩小
      if self.img_height > self.screenheight * 0.5:
            width = int(0.5 * self.screenwidth)
            height = int(width / self.rate)
            img = ImageTk.PhotoImage(
                image=img_open.resize(size=(width, height)))
      else:
            img = ImageTk.PhotoImage(img_open)
      label_img = Label(self.old_pic_frame, image=img).grid(row=1, column=1)

    def process(self):
      """处理右下角水印"""
      global new_img
      im = Image.open(self.filepath).convert("RGB")
      right_bottom = 4# 右下角水印位置
      for w in range(self.img_width//4, self.img_width):
            for h in range(self.img_height//4, self.img_height):
                pos = (w, h)
                if sum(im.getpixel(pos)[:3]) > 600:
                  im.putpixel(pos, (255, 255, 255))
      new_pic_path = path.dirname(
            self.filepath) + "/去水印_" + path.basename(self.filepath)
      im.save(new_pic_path)
      img_open = Image.open(fp=new_pic_path)
      # 如果图片高度过高则进行缩小
      if self.img_height > self.screenheight * 0.5:
            width = int(0.5 * self.screenwidth)
            height = int(width / self.rate)
            new_img = ImageTk.PhotoImage(
                image=img_open.resize(size=(width, height)))
      else:
            new_img = ImageTk.PhotoImage(img_open)

      label_img_new = Label(self.new_pic_frame, image=new_img).grid(
            row=1, column=2)
      messagebox.showinfo('温馨提示', "完成去除水印啦(:")

    def process_all(self):
      global new_img
      im = Image.open(self.filepath).convert("RGB")
      width, height = im.size

      for w in range(width):
            for h in range(height):
                pos = (w, h)
                r, g, b = im.getpixel(pos)[:3]
                avg = (r + g + b) / 3
                limit = 0.10
                if avg > 100 and abs((r-avg)/avg) < limit and abs((g-avg)/avg) < limit and abs((b-avg)/avg) < limit:
                  im.putpixel(pos, (255, 255, 255))
      new_pic_path = path.dirname(
            self.filepath) + "/去水印_" + path.basename(self.filepath)
      im.save(new_pic_path)
      img_open = Image.open(fp=new_pic_path).convert("RGB")

      # 如果图片高度过高则进行缩小
      if self.img_height > self.screenheight * 0.5:
            width = int(0.5 * self.screenwidth)
            height = int(width / self.rate)
            new_img = ImageTk.PhotoImage(
                image=img_open.resize(size=(width, height)))
      else:
            new_img = ImageTk.PhotoImage(img_open)
      label_img_new = Label(
            self.new_pic_frame, image=new_img).grid(row=1, column=2)# , columnspan=3,sticky="EW",
      messagebox.showinfo('温馨提示', "完成去除水印啦(:")


if __name__ == "__main__":
    main = Remove_watermark()
    img = None
    new_img = None
    mainloop()

涛之雨 发表于 2021-11-25 23:11

本帖最后由 涛之雨 于 2021-11-25 23:12 编辑

【Chrome插件】Chrome插件修改教程(一款GitHub的插件为例,附样品)
https://www.52pojie.cn/thread-1215596-1-1.html
(出处: 吾爱破解论坛)

我这个帖子里的水印应该不容易完全去掉吧。。。
我原图丢了,现在需要用到的时候我面对满屏的水印我不知所措。。。

mrliu133 发表于 2021-11-26 09:21

知心 发表于 2021-11-26 09:19
你用pipenv进行打包,只安装需要用到的库

已经搞定,打包成功了,感谢你的建议

cxincn 发表于 2021-11-25 19:32

学习学习,谢谢分享

carrot2017 发表于 2021-11-25 19:40

学习学习,谢谢分享

Sugar01 发表于 2021-11-25 19:40

没看到在哪里下载啊?

buy360 发表于 2021-11-25 19:41

执行文件哪里哈

mrliu133 发表于 2021-11-25 19:42

Sugar01 发表于 2021-11-25 19:40
没看到在哪里下载啊?

打包文件体积太大,还没降下来。你可以自己copy去打包。

mrliu133 发表于 2021-11-25 19:44

buy360 发表于 2021-11-25 19:41
执行文件哪里哈

执行文件体积我还没搞定怎么让他变小些,希望有其他大佬优化一下吧。

Adgerlee 发表于 2021-11-25 20:04

大佬欸!!!

小帥 发表于 2021-11-25 20:31

本帖最后由 小帥 于 2021-11-25 20:34 编辑

没成品吗?

开心长寿果 发表于 2021-11-25 20:39

谢谢分享
页: [1] 2 3 4 5 6 7
查看完整版本: 【Python】一键去除图片水印,含简单可视化界面