PyQt5 给图片换颜色

import PIL.Image as Image
import colorsys

IMAGE_TITLE = "C:\\Users\\26593\\Desktop\\BlueprintDemo\\examples\\Node\\images\\未标题-1_05.png"
IMAGE_TITLE_OBJECT = Image.open(IMAGE_TITLE).convert('RGBA')

def setImageColor(filename="",target_hue=0):
    # 输入文件
    # 目标色值
    # Hue 为 0 代表红色,120 代表绿色,240 代表蓝色。我们可以自定义 0-355 这 360 个数值,实现不同的色调转换
    # 读入图片,转化为 RGB 色值
    if filename == "":
        image = IMAGE_TITLE_OBJECT#用图片缓存优化性能
    else:
        image = Image.open(filename).convert('RGBA')
    # 将 RGB 色值分离
    image.load()
    r, g, b, a = image.split()
    result_r, result_g, result_b, result_a = [], [], [], []
    # 依次对每个像素点进行处理
    for pixel_r, pixel_g, pixel_b, pixel_a in zip(r.getdata(), g.getdata(), b.getdata(), a.getdata()):
        # 转为 HSV 色值
        h, s, v = colorsys.rgb_to_hsv(pixel_r / 255., pixel_b / 255., pixel_g / 255.)
        # 转回 RGB 色系
        rgb = colorsys.hsv_to_rgb(target_hue/255., s, v+0.2)
        pixel_r, pixel_g, pixel_b = [int(x * 255.) for x in rgb]
        # 每个像素点结果保存
        result_r.append(pixel_r)
        result_g.append(pixel_g)
        result_b.append(pixel_b)
        result_a.append(pixel_a)
    r.putdata(result_r)
    g.putdata(result_g)
    b.putdata(result_b)
    a.putdata(result_a)
    # 合并图片
    image = Image.merge('RGBA', (r, g, b, a))
    return image

self.title_color = random.randint(0,355)#随机整数
img = setImageColor(target_hue=self.title_color)
qpixmap = img.toqpixmap()
self.title_background.setPixmap(qpixmap.scaled(self.width(),self.height(),Qt.IgnoreAspectRatio,Qt.SmoothTransformation))
#饱满缩放Qt.IgnoreAspectRatio,Qt.SmoothTransformation
#等比例缩放Qt.KeepAspectRatio, Qt.SmoothTransformation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值