2018-11-27日更新:
由于没有找到生成.bmp格式图片的好办法,改为使用.wbmp格式,转换和读取都改为.wbmp格式,原来的bmp2hex函数逻辑没有变化,改名为wbmp2hex,并不再使用ImageCreateFromBMP函数,可以收藏一下这个函数还是有用的,最新的代码我也提供了下载在文章末尾
准备阶段:
pctoLCD2002
网上找到的一款取模软件,可以读取.bmp图片并生成字模,当然我们还是要用代码来完成,这个只是起到了一个对照作用,我将它放在了我的网盘下供大家下载
链接:点我下载pctoLCD2002 密码:2lyl
PHP GD扩展
强大的PHP图像生成和处理扩展
Windows自带画图工具
主要用来生成.bpm格式的图片,目前我还没有找到好的用PHP将.jpg和.png图片转为单色.bmp格式图片的办法,暂时只好用画图工具来生成
操作步骤分解演示
一. 使用画图工具获得.bmp格式图片
使用画图工具打开一张事先准备好的图片,另存为.bmp单色位图,这样我们就得到了一张.bmp格式的图片,白色背景,只有黑色
打开图片
另存为
.bmp格式
或者我们自己动手来画一张,打开画图工具,调整画布大小为你需要的尺寸,示例为100*70像素,取消勾选保持纵横比,调整好后点击确定,然后我们可以用刷子随便画些什么在画布上,你喜欢就好,然后重复前面的另存为.bmp单色位图步骤
image.png
pctoLCD2002也可以新建一幅.bmp图片,并且非常简单
pctoLCD2002新建bmp文件
二. 使用pctoLCD2002取模
找到PCtoLCD2002.exe并双击打开
1. 规则解析,及本文配置项参考
在取字模之前我们先来说下PCtoLCD2002设置项和取模规则
配置信息:
pctoLCD2002设置项
取模说明:
a. 逐行式逐列式:顾名思义就是读取每张图片时取点时是逐行还是逐列的
b. 取模走向:
逆向:从低位到高位
顺向:从高位到低位
举例:
*星号代表图中非空白的像素点,_代表空白的像素点,取八位为一个字节
* _ _ _ _ _ _ _代表一个字节(为了方便查看,每个符号键我加入了一个空格,实际是没有的)
逆向即是从后往前写,表示为00000001
顺向即是从前往后写,表示为10000000
c. 输出数制:
这里选择十六进制,因需选择,不够我需要的是十六进制,后面的代码也只有十六进制的
本文取模规则:
逐行式 顺向 十六进制
从第一行开始,每行每隔8个像素点为一个字节,每行结尾最后不足8位,用0补满2. 生成字模
设置好规则后,打开之前制作的.bmp图片,点击生成字模,这时下方会生成出十六进制串,如图:
image.png
但是这还不是我最后想要的格式,需要处理一下:
去掉开始处和结束处的文件路径
去掉所有的标点符号,和'{' '}'
去掉十六进制的标识部分,所有的0x
最后得到一串连贯的字符串,类似:
0000000000000007F8000000000000000000000000003FFC00000000000000000000000000000003FF80000000
这就是我们最终需要的部分了!下面我们用代码来实现这个功能:
问题解决:
一. 实现过程及思路
0. 生成单色位图
卡在这里好久,钻进了死胡同,其实.wbmp的图片完全符合我的要求:
GD库就可以将jpg/png转换成wbmp格式,使用时可以调节threshold参数,解释如下,我理解为精度不知道准不准确,也没有查到阀值到底是什么意思…
threshold
生成.wbmp格式图片代