oddhw 发表于 2023-6-30 14:10

批量加水印小软件2.0(7.5更新)

本帖最后由 oddhw 于 2023-7-5 15:43 编辑

pyton写的,公司要求朋友圈必须加水印,顺手写一个小软件 但是可能只适用于我单位...
发出来分享一下,后续如果有人需要可以增加功能和优化
https://wwtk.lanzoub.com/b03ehcqeh
密码:c8k1
https://static.52pojie.cn/static/image/hrline/1.gif
7.5第一次更新
在PNG基础上追加jpg,jpeg,bmp格式(真的需要其他格式的水印吗...)
现在上传完的水印图片会在按钮内显示水印的预览图啦!
现在选择完图片也会显示生成了多少张图片和生成的路径,并且添加了一个小进度条
https://static.52pojie.cn/static/image/hrline/1.gif
import os
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QFileDialog, QGridLayout, QSizePolicy, QLabel, QProgressBar
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtCore import Qt, QSize
from PIL import Image

class MainWindow(QMainWindow):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("水印工具2.0")
      self.setWindowIcon(QIcon("push.ico"))

      self.central_widget = QWidget()
      self.setCentralWidget(self.central_widget)
      self.layout = QGridLayout(self.central_widget)
      self.layout.setSpacing(0)

      self.watermark_path = ""
      self.image_paths = []
      self.output_folder = ""

      self.watermark_button = QPushButton("选择水印图片")
      self.watermark_button.clicked.connect(self.select_watermark)
      self.layout.addWidget(self.watermark_button, 2,0)

      self.image_button = QPushButton("选择图片")
      self.image_button.clicked.connect(self.select_images)
      self.layout.addWidget(self.image_button, 2, 1)

      self.folder_label = QLabel()
      self.layout.addWidget(self.folder_label, 3, 0)

      self.folder_button = QPushButton("选择输出文件夹")
      self.folder_button.clicked.connect(self.select_output_folder)
      self.layout.addWidget(self.folder_button, 4, 0)

      self.start_button = QPushButton("开始添加水印")
      self.start_button.clicked.connect(self.start_watermarking)
      self.layout.addWidget(self.start_button, 4, 1)

      self.progress_bar = QProgressBar()
      self.layout.addWidget(self.progress_bar, 5, 0, 1, 2)

      self.central_widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
      self.watermark_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
      self.image_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
      self.folder_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
      self.start_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

      self.central_widget.setLayout(self.layout)
      self.setMinimumSize(500, 500)
      self.show()

    def select_watermark(self):
      file_dialog = QFileDialog()
      file_dialog.setNameFilter("Image files (*.png *.jpg *.jpeg *.bmp)")
      if file_dialog.exec_():
            self.watermark_path = file_dialog.selectedFiles()
            pixmap = QPixmap(self.watermark_path)
            pixmap = pixmap.scaled(self.watermark_button.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
            scaled_path = os.path.join(os.path.dirname(self.watermark_path), "scaled_watermark.png")
            pixmap.save(scaled_path)
            scaled_path = scaled_path.replace('\\', '/')# 将路径中的反斜杠替换为正斜杠
            self.watermark_button.setStyleSheet(f"QPushButton {{background-image: url({scaled_path}); background-position: center; background-repeat: no-repeat; background-attachment: fixed}}")

    def select_images(self):
      file_dialog = QFileDialog()
      file_dialog.setNameFilter("Image files (*.png *.jpg *.jpeg)")
      file_dialog.setFileMode(QFileDialog.ExistingFiles)
      if file_dialog.exec_():
            self.image_paths = file_dialog.selectedFiles()

            # 在按钮上显示选择的文件数量
            self.image_button.setText(f"选择图片 ({len(self.image_paths)})")

            pixmap = QPixmap(self.image_paths)
            pixmap = pixmap.scaled(self.image_button.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
            pixmap.save("scaled_image.png")
            self.image_button.setStyleSheet("QPushButton {background-image: url(" + os.path.abspath("scaled_image.png") + "); background-position: center; background-repeat: no-repeat; background-attachment: fixed}")

    def select_output_folder(self):
      file_dialog = QFileDialog()
      file_dialog.setFileMode(QFileDialog.DirectoryOnly)
      if file_dialog.exec_():
            self.output_folder = file_dialog.selectedFiles()
            self.folder_button.setText("输出文件夹: " + self.output_folder)

    def start_watermarking(self):
      self.progress_bar.setMaximum(len(self.image_paths))

      for index, image_path in enumerate(self.image_paths):
            image = Image.open(image_path)
            watermark = Image.open(self.watermark_path)
            watermark = watermark.resize(image.size, Image.ANTIALIAS)
            image.paste(watermark, (0,0), watermark)
            image.save(os.path.join(self.output_folder, os.path.basename(image_path)))
            self.progress_bar.setValue(index + 1)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.setWindowIcon(QIcon("ppush.ico"))# 设置应用程序的图标,将显示在任务栏
    sys.exit(app.exec_())

ClearLover 发表于 2023-7-10 08:55

希望能支持路径加水印功能,比如一个路径为D:\0710,它里面有jpg,png等各种格式的图片,但是它们都在不同的文件夹里,比如1 6 7a s0 3921等文件夹里,这时候一个文件夹一个文件夹的去选择就会很麻烦,所以希望加上路径加水印的功能以及是否原文件名保存。

oddhw 发表于 2023-7-5 09:26

1233594 发表于 2023-7-5 09:13
有点简单了~非常有用的东西,能添加预览就更好了了~加上水印位置和选项平铺,距离就更完美了·

预览的功能正在做,但是没想好应该怎么做,因为朋友圈一次9张,我单位就是一个水印直接加上就完事了,不需要其他的平铺旋转之类的所以就没做,这个可以加

fxd680126 发表于 2023-7-2 06:21

简单方便。感谢分享!

大大连连 发表于 2023-7-2 08:29

好东西感谢分享

山田凉粉 发表于 2023-7-2 09:18

谢谢分享

knx888 发表于 2023-7-2 09:36

确实有一定局限性,只有PNG可以加水印,无法选择更多格式的。

february 发表于 2023-7-2 09:46

操作简单,期待后续的更新,能添加更多格式和功能

awxzw 发表于 2023-7-2 20:45

简单方便。感谢分享!

mollish 发表于 2023-7-2 20:58

这个要,下载试试,希望好用

dalianlv 发表于 2023-7-2 22:15

不捡漏 挺清爽的 这种工具直观就最好啦~

fop2020 发表于 2023-7-3 12:54

感谢分享!
页: [1] 2 3 4 5 6 7
查看完整版本: 批量加水印小软件2.0(7.5更新)