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
PyQt5 给图片换颜色
最新推荐文章于 2024-02-03 15:17:22 发布