如何用php将一张jpg/png转成.bmp格式单色位图

我需要将一张彩色jpg/png图转换成单色位图(不是GD库中的wbmp,而是bmp),类似windows下画图工具这样:

clipboard.png

转换前:

clipboard.png

转换后:

clipboard.png

现在需要用php代码来实现,大家有什么思路么?或者现成的轮子?求指点!

阅读 7.3k
4 个回答

太晚了用手机简单答下,如果哪里有问题明天再补充~

  1. PHP上的图像处理,一般第一个想到的就是GD库吧。
  2. 不确定题目中出现的单色BMP文件是否就是WBMP,如果是的话,优先考虑GD库的jpeg2wbmppng2wbmp两个函数(或者可以先试试,看输出的东西对不对再说)。
  3. 如果不是的话,考虑传统方案,先用imagecreatefromjpeg创建资源,再用imagefilter做去色,最后imagebmp输出。PNG也是一样流程(换下函数),手机懒得打了。
  4. 注意下GD库介绍中的版本要求,BMP这块还挺高的,老版本GD的API应该在菜鸟教程上有,手机懒得搜了,就这样吧。

我原本的思路是,将jpg/png图片转化成.bmp单色位图,也就是只有黑白色,然后逐个像素读取,取字模最终转成16进制字符串,最终结果类似是下面这样:
E00000007F0000F8000000FF0000FE000007F700007F80001FE700001FE007FF87000007F81FFC07000
当然根据图片大小不同,长度是不一样的,结果后半部分编码完成后,卡在了jpg/png转成.bmp这一步,经过不停的尝试,发现.wbmp格式的图片也是我想要的样子,GD库也有转换和读取.wbmp格式的函数,所以问题解决了;但是最后还是没有找到转成.bmp格式的办法,.wbmp并不等于.bmp
整个问题我记录了在https://www.jianshu.com/p/779...;有兴趣的可以看下,如有错误之处还请不吝赐教!

png 转 bmp (PHP 7 >= 7.2.0)

$png = EASYSWOOLE_ROOT . '/Uploads/Qrcode/qrcode.png'; 
$bmp = EASYSWOOLE_ROOT . '/Uploads/Qrcode/qrcode.bmp';
imagebmp($pngObj, $bmp);

imagebmp — Output a BMP image to browser or file

官方文档

imagebmp-一位网友写的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏