文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

php如何把二进制转为图片

2023-07-05 21:20

关注

这篇“php如何把二进制转为图片”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何把二进制转为图片”文章吧。

一、二进制和十六进制的转换

在学习如何把二进制转为图片之前,我们需要先掌握二进制和十六进制的相互转换。以8个二进制位为一组,即一个字节为单位,可表示0~255之间的整数;而每四个二进制位对应一个十六进制数字,即一个字节用两位十六进制数表示。比如,二进制数11001000对应着十六进制数0xC8,而十六进制数0x50对应着二进制数01010000。

我们可以通过PHP的sprintf函数,将任意进制的整数转换为指定位数的进制字符串。比如,将$int表示的整数,转换为8位的二进制字符串,可以使用下面的代码:

$bin = sprintf("%08b", $int);

同样的,将$int表示的整数,转换为2位的十六进制字符串,可以使用下面的代码:

$hex = sprintf("%02x", $int);

二、把二进制转为图片

下面,我们就来学习如何把二进制字符串转为PNG图片。PNG图片格式支持多种颜色的透明度,并且不会产生压缩损失,因此在Web开发中被广泛使用。

首先,我们需要定义一个$binary变量,保存由二进制字符串转换而来的字节数组。对于一张24位真彩色(RGB)的PNG图片,它的像素值由3个字节的RGB值组成,因此,在转换过程中,需要将二进制字符串按照3个字节为一组进行切分。切分完成之后,就可以将每一组字节分别作为RGB三通道的值,生成PNG图片的像素数组。生成像素数组后,使用imagepng函数将像素数组写入PNG图片文件中,从而生成PNG图片。

完整代码如下:

//将二进制字符串转为PNG图片function binaryToPNG($binary, $width, $height) {    //计算像素数组的长度(每个像素由3个字节的RGB值组成)    $len = strlen($binary);    $pixelLen = $len / 3;    //通过imagecreatetruecolor函数创建一个PNG图片的像素数组    $im = imagecreatetruecolor($width, $height);    //遍历二进制字符串,将每一组3个字节的值分别作为RGB三通道的值,并生成像素数组    for ($i = 0; $i < $pixelLen; $i++) {        $r = ord($binary[$i * 3]);        $g = ord($binary[$i * 3 + 1]);        $b = ord($binary[$i * 3 + 2]);        imagesetpixel($im, $i % $width, floor($i / $width), imagecolorallocate($im, $r, $g, $b));    }    //使用imagepng函数将像素数组写入PNG图片文件中,从而生成PNG图片    header('Content-Type:image/png');    imagepng($im);    imagedestroy($im);}

最后,我们还需要将二进制字符串转为PHP的字节数组,才能在binaryToPNG函数中对其进行操作。对于一个形如"0100101010101001010..."的二进制字符串,可以使用下面的代码将其转换为PHP的字节数组:

$binary = pack("B*", $binaryString);

三、把图片转为二进制

与将二进制转为图片相对应,我们也需要将图片转为二进制字符串。这个过程可以使用imagecreatefrompng函数将PNG图片读取为像素数组,再使用imagecolorat函数获取每个像素的RGB值,最后将RGB值拼接成一个二进制字符串。完整代码如下:

//将PNG图片转为二进制字符串function pngToBinary($file) {    //通过imagecreatefrompng函数将PNG图片读取为像素数组    $im = imagecreatefrompng($file);    $width = imagesx($im);    $height = imagesy($im);    $binary = '';    //遍历像素数组,获取每个像素的RGB值,拼接成一组二进制字符串    for ($y = 0; $y < $height; $y++) {        for ($x = 0; $x < $width; $x++) {            $rgb = imagecolorat($im, $x, $y);            $r = ($rgb >> 16) & 0xFF;            $g = ($rgb >> 8) & 0xFF;            $b = $rgb & 0xFF;            $binary .= sprintf("%02x%02x%02x", $r, $g, $b);        }    }    return $binary;}

以上就是关于“php如何把二进制转为图片”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯