大名鼎鼎的幻影坦克。
主程序tank.py、说明文档README.md以及三张示例图片,简单清晰。tank.py里所有功能都进行了模块化,可以把定义的一些函数单独拿出来作为一个程序用。(话说都是奔着幻影坦克来的,谁会去在乎中间功能啊)
此程序需要有Python环境,并且Python目录要包含在PATH环境变量里。
将要作为表图和里图的两张图片放在程序根目录下,打开控制台,输入python tank.py [表图] [里图],稍作等待,程序会自动生成一张名为tank_out.png的透明图片。发到QQ群里或者贴吧里,就能看到显著的幻影坦克效果。(实际上手机相册也行)
两张图片尺寸差别不至于悬殊的情况下,图不需要做任何预处理,程序会自动生成一张正常的新图片。但是程序是按照图片原大小进行处理的,如果说两张图尺寸差异太大(200*200的头像和1080p的超清大图这种差距),最好把两张图转换成差不多大,否则影响观感(Honeyview有转换图片大小的功能)。
注:程序生成的图片为LA(灰度、透明度)双通道色彩模式,可能对图像进行处理会不方便,可以使用以下代码将图片转换为RGBA通道色彩模式:
from PIL import Image
Image.open('tank_out.png').convert('RGBA').save('RGBA_tank_out.png')幻影坦克的核心原理有不少人已经讲过了(特推一个,B站Up偶尔有点小迷糊,视频地址用Python制作『幻影坦克』(公式法))。
整个程序主要依赖Pillow库的Image类。
- 调整图片亮度 我自行将图像中的每个像素点都遍历一遍,再
Image.getpixel得到像素点的色值,进行计算,使得表图亮度最低不低于128,里图亮度最高不高于128,二者便不会冲突(Image应该有自动将图片全局处理的方法,如果有请告知我,我会改进)。 - 将图片居中对齐 我事先计算偏差量,
Image.new两张新图像作为新的表图和里图,长宽以两张图长宽的最大值为准,表图颜色预设为0xFF(纯白),里图为0x0(纯黑),再用Image.paste将两张图片粘贴至新图,偏差已计算好。 - 最后将两张图片输入幻影坦克核心算法计算即可。
具体可参考代码。