php如何把二进制转为图片

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