这篇“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如何把二进制转为图片”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。