滑块调节透明度程序的问题(已解决)

滑块调节透明度程序的问题(已解决)

python半透明调节器

这是需要透明化的图形, 
加上背景,为了衬托半透明效果。

python半透明调节器

python半透明调节器

本问题已经解决,具体请看文章最下面。

"""
  这个程序运行后,能通过滑块调节图形的透明度。
  
  本程序的问题在于,某些像素本来就是透明的,这些像素不需要调节!
  那么调节的时候就会把它变成不透明,所以呈现的效果就像演示的那样。
  本来透明的区域出现了图形,理想的结果就是这些透明像素不需要变化。
  那么如何解决这个问题呢?
"""
from tkinter import *
import numpy as np
from PIL import Image,ImageTk

def modify_alpha(event):
    global photo                        # 这个必需要全局变量
    a = s1.get()                        # 获取滑块值
    imarray = np.array(rawim)           # 从原始图转换成array
    imarray[:,:,3] = a                  # 修改alpha通道的值为a
    i = Image.fromarray(imarray)        # 从数组中加载为图像
    photo = ImageTk.PhotoImage(i)       # 形成tkinter能显示的图形对象
    cv.itemconfig(pic,image=photo)      # 重新配置pic的图形
    
root = Tk()                             # 新建根窗口 
cv = Canvas(width=640,height=360)       # 新建画布
cv.pack()                               # 放置画布

bgpic = ImageTk.PhotoImage(file='bg.png')# 背景图片,衬托透明
bg = cv.create_image(320,180,image=bgpic)# 创建背景item对象

rawim = Image.open('redturtle.png')      # 原始图形
photo = ImageTk.PhotoImage(rawim)        # 包装成画布能显示的图形对象
pic = cv.create_image(320,180,image=photo)# 在画布上创建图形

v = StringVar()
s1 = Scale(root,from_=0,to=255,orient=HORIZONTAL,command=modify_alpha,
           resolution=1,tickinterval=10,length=600,variable=v)
s1.pack()

root.mainloop()

本人已解决此问题,需要答案关注微信公众号:李兴球Python,回复 alphaquestion 即可获取答案。


或者成为会员,登陆即可得到核心代码:

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

李兴球

李兴球的博客是Python创意编程原创博客