今天跟大家唠唠我最近搞的一个小玩意儿——死飞配色模拟器。
这事儿得从我那辆吃灰的死飞说起。搁置了很久,最近又想骑起来,但是越看那配色越不顺眼,就琢磨着重新捯饬捯饬。可是,光靠脑子想,颜色搭配出来总感觉差点意思,万一喷漆完了才发现丑爆了,那不就白瞎了吗!
于是乎,我就开始琢磨能不能自己搞个小工具,能提前模拟死飞的配色。说干就干,立马开始搜资料,看看有没有现成的轮子可以用。网上搜了一圈,发现是有一些配色软件,但是要么功能太简单,要么就是广告太多,用起来不爽。
既然没有趁手的,那就撸起袖子自己写一个呗!
我把死飞拆解成几个主要的部分:车架、轮毂、车把、轮胎、链条,牙盘等等。然后,我就开始找素材,把这些部件的图片抠出来,保存成透明背景的PNG格式,方便后续在程序里叠加。
接下来就是选技术栈了。考虑到我主要是在电脑上用,而且想快速搞出来,就选了用Python+PyQt5来实现。PyQt5做界面简单快捷,而且Python的颜色处理库也比较丰富。
界面搭起来还算顺利,用Qt Designer拖拖拽拽,很快就把各个部件的选择区域和颜色选择器都放好了。然后就是核心的颜色模拟部分。
我用PyQt5的QPushButton做了色块选择器,点击不同的色块,就能改变对应部件的颜色。颜色改变的原理也很简单,就是读取部件PNG图片的像素数据,然后把指定区域的像素颜色替换成选择的颜色。这里面涉及到一些图片处理的知识,比如怎么读取PNG图片的透明通道,怎么进行颜色混合等等。
为了让颜色更真实,我还加了一个简单的光照效果。就是根据部件的朝向,稍微调整一下颜色的亮度,让它看起来更有立体感。
在实现的过程中,遇到的最大的问题就是颜色同步。因为每个部件都是独立的PNG图片,所以改变颜色的时候,要保证所有部件的颜色都同步更新,否则就会出现颜色不一致的情况。为了解决这个问题,我用了一个全局的颜色字典,每次改变颜色的时候,都把新的颜色值更新到字典里,然后所有部件都从这个字典里读取颜色,这样就保证了颜色的一致性。
我还加了一个保存配色的功能,可以把当前的配色方案保存成图片,方便以后查看和分享。
整个项目不大,但是也花了我好几个晚上的时间。不过看到最终的效果,感觉还是挺值的。我可以随意搭配死飞的颜色,再也不用担心喷漆完了才后悔了。
虽然现在这个模拟器还比较简陋,但是基本的功能已经实现了。以后有时间,我还会继续完善它,比如增加更多的部件选择,更真实的材质效果等等。
如果你也喜欢死飞,或者对这个小工具感兴趣,可以自己尝试着做一个,绝对会给你带来不少乐趣。