You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter实现图片添加透明Logo水印问题求助

TKinter添加透明Logo水印问题修复

你的代码存在几个关键问题导致未达到预期效果,以下是修正后的完整代码,同时实现Logo透明化:

from tkinter import *
from tkinter import filedialog
from tkinter.ttk import *
from PIL import Image, ImageTk

# 全局变量保存选中的背景图和Logo路径
background_path = ""
logo_path = ""

def watermark():
    if not background_path or not logo_path:
        return  # 未选图时不执行
    
    # 打开背景图和Logo并统一转为RGBA模式
    background_image = Image.open(background_path).convert("RGBA")
    logo_image = Image.open(logo_path).convert("RGBA")

    # 按比例缩放Logo,避免拉伸变形
    bg_w, bg_h = background_image.size
    logo_w, logo_h = logo_image.size
    
    # 计算缩放比例,确保Logo不超过背景图的1/4大小(可调整)
    scale = min(bg_w / (4 * logo_w), bg_h / (4 * logo_h), 1)
    new_logo_size = (int(logo_w * scale), int(logo_h * scale))
    logo_image = logo_image.resize(new_logo_size, Image.Resampling.LANCZOS)

    # 创建结果画布
    result_image = Image.new("RGBA", background_image.size)
    result_image.paste(background_image, (0, 0))

    # 设置Logo位置(右下角带边距,可调整)
    logo_x = bg_w - new_logo_size[0] - 20
    logo_y = bg_h - new_logo_size[1] - 20

    # 粘贴Logo并保留透明通道
    result_image.paste(logo_image, (logo_x, logo_y), mask=logo_image)
    result_image.show()

def open_file():
    global background_path
    background_path = filedialog.askopenfilename(initialdir=r'Users\picture') 

def open_filelogo():
    global logo_path
    logo_path = filedialog.askopenfilename(initialdir=r'Users\picture')

window=Tk()
window.title("Water Mark APP")
window.geometry('500x400')

label=Label(text="Select the image",font=("Arial", 25))
label.place(relx=0.5, rely=0.3, anchor=CENTER)

Button1=Button(text="Select Image",command=open_file)
Button1.place(relx=0.5, rely=0.5, anchor=SE)

Button2=Button(text="Select Image Logo",command=open_filelogo)
Button2.place(relx=0.5, rely=0.5, anchor=NW)

# 添加执行水印生成的按钮
Button3=Button(text="Add Watermark",command=watermark)
Button3.place(relx=0.5, rely=0.7, anchor=CENTER)

window.mainloop()

关键修改点说明:

  • 新增全局变量保存选中的图片路径,解决原代码局部变量无法传递的问题
  • 添加Add Watermark按钮作为水印生成的触发入口,原代码缺少执行逻辑的启动项
  • 修正背景图打开方式,使用用户选择的路径而非错误的固定参数
  • Logo改为按比例缩放,避免拉伸变形,同时限制最大尺寸(可自行调整比例)
  • 统一转换图片为RGBA模式,确保透明通道生效,粘贴时通过mask参数保留Logo透明效果
  • 调整Logo默认位置到右下角(带边距),可通过修改logo_x和logo_y调整位置
  • 文件路径使用原始字符串避免转义字符问题

内容的提问来源于stack exchange,提问作者Charitra Gour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:07:20