接上篇文章继续解绍arcade游戏编程的基本知识。坦克换颜色,arcade texture类的学习
RGB色彩就是常说的三原色,R代表Red(红色),G代表Green(绿色),B代表Blue(蓝色)。自然界中肉眼所能看到的任何色彩都可以由这三种色彩混合叠加而成,因此也称为加色模式。
如:
(0, 0, 0) 代表 RGB 都是没有的,呈现黑色。
(255, 255, 255) 代表 RGB 都是满的,呈现白色。
(0, 255, 255) 代表 R 无,G 是满的,B 是满的,蓝色和绿色混合呈现出青色。
因此,通过这三个数值的表示,我们就可以实现各种颜色的呈现。
print(‘图片大小’,img.size)#打印图片大小
print(‘图片34,34处颜色’,img.getpixel((24,34)))
from PIL import Imagei = 1
j = 1
img = Image.open("images/坦克2.png")#读取系统的内照片
print('图片大小',img.size)#打印图片大小
print('图片34,34处颜色',img.getpixel((24,34)))width = img.size[0]#长度
height = img.size[1]#宽度for i in range(0,width):#遍历所有长度的点for j in range(0,height):#遍历所有宽度的点data = (img.getpixel((i,j)))#打印该图片的所有点print(data)#打印每个像素点的颜色RGBA的值(r,g,b,alpha)print(data[0])#打印RGBA的r值if (data[0] >= 57) and (data[0] <= 100):img.putpixel((i, j), (234, 53, 57, 255)) # 则这些像素点的颜色改成大红色img = img.convert("RGB") # 把图片强制转成RGB
img.show()
此法适合换单色的图片,某一类颜色的更换,如换背景色。
RGB 是根据颜色发光的原理来设计的,比如这里有红绿蓝三道光,当三束光混合在一起的时候,其呈现的最终的光效颜色就取决于这三种原色光的强弱了。
HSV 是一种颜色空间分布,包括以下三个维度:
hue 色调 | saturation 饱和度 | value 亮度
三个维度的不同组合,可以形成不同的颜色,通常用一个圆锥表示:
详细可参看https://blog.csdn.net/qq_38423499/article/details/104682039
colorsys.py中的rgb_to_hsv
# HSV: Hue, Saturation, Value
# H: position in the spectrum
# S: color saturation ("purity")
# V: color brightnessdef rgb_to_hsv(r, g, b):maxc = max(r, g, b)minc = min(r, g, b)v = maxcif minc == maxc:return 0.0, 0.0, vs = (maxc-minc) / maxcrc = (maxc-r) / (maxc-minc)gc = (maxc-g) / (maxc-minc)bc = (maxc-b) / (maxc-minc)if r == maxc:h = bc-gcelif g == maxc:h = 2.0+rc-bcelse:h = 4.0+gc-rch = (h/6.0) % 1.0return h, s, v
# _*_ coding: UTF-8 _*_
# 开发团队: 信息化未来
# 开发人员: Administrator
# 开发时间:2022/11/27 12:24
# 文件名称: 图片换色.py
# 开发工具: PyCharmfrom PIL import Image
import colorsysimage = Image.open("images/坦克2.png").convert('RGB') # 读取系统的内照片
# 将 RGB 色值分离
image.load()
r, g, b = image.split()
result_r, result_g, result_b = [], [], []
# 依次对每个像素点进行处理
for pixel_r, pixel_g, pixel_b in zip(r.getdata(), g.getdata(), b.getdata()):# 转为 HSV 色值h, s, v = colorsys.rgb_to_hsv(pixel_r / 255., pixel_b / 255., pixel_g / 255.)# 转回 RGB 色系的过程中修改h# 可自行调整h为0-1的大小,改变图片颜色,s、v代表无需改变,三个参数分别代表色调、饱和度、明度。rgb = colorsys.hsv_to_rgb(h+0.3, s, v)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)r.putdata(result_r)
g.putdata(result_g)
b.putdata(result_b)# 合并图片
image = Image.merge('RGB', (r, g, b))
image.show()
from PIL import Image
import colorsysdef change_color_pic(fimage,H_add=0.4):image=fimage.convert('RGB')# 将 RGB 色值分离image.load()r, g, b = image.split()result_r, result_g, result_b = [], [], []# 依次对每个像素点进行处理for pixel_r, pixel_g, pixel_b in zip(r.getdata(), g.getdata(), b.getdata()):# 转为 HSV 色值h, s, v = colorsys.rgb_to_hsv(pixel_r / 255., pixel_b / 255., pixel_g / 255.)# 转回 RGB 色系的过程中修改h# 可自行调整h为0-1的大小,改变图片颜色,s、v代表无需改变,三个参数分别代表色调、饱和度、明度。rgb = colorsys.hsv_to_rgb(h+H_add, s, v)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)r.putdata(result_r)g.putdata(result_g)b.putdata(result_b)# 合并图片return Image.merge('RGB', (r, g, b))pic = Image.open("images/坦克2.png") # 读取系统的内照片
newimg = change_color_pic(pic)
newimg.show()
第二种方法较适合我们游戏的制作,只需更改一个参数,可以制造出很多类似的敌机坦克。
可关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主
今天是以此模板持续更新此育儿专栏的第 34/50次。
可以关注我,点赞我、评论我、收藏我啦。