php 生成单色位图,使用PHP实现将jpg/png转成.wbmp/.bmp格式图片后再转为16进制字符串(单色位图取模)...

这篇博客介绍了如何使用PHP将.jpg/png图片转换为单色.wbmp格式,并将其转换为16进制字符串。通过画图工具创建.bmp图片,然后使用pctoLCD2002软件进行取模,最终通过PHP GD扩展读取.wbmp文件,逐像素处理,形成所需格式的16进制字符串。
摘要由CSDN通过智能技术生成

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格式图片代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值