溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php如何把二進(jìn)制轉(zhuǎn)為圖片

發(fā)布時間:2023-04-04 15:23:18 來源:億速云 閱讀:109 作者:iii 欄目:編程語言

這篇“php如何把二進(jìn)制轉(zhuǎn)為圖片”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“php如何把二進(jìn)制轉(zhuǎn)為圖片”文章吧。

一、二進(jìn)制和十六進(jìn)制的轉(zhuǎn)換

在學(xué)習(xí)如何把二進(jìn)制轉(zhuǎn)為圖片之前,我們需要先掌握二進(jìn)制和十六進(jìn)制的相互轉(zhuǎn)換。以8個二進(jìn)制位為一組,即一個字節(jié)為單位,可表示0~255之間的整數(shù);而每四個二進(jìn)制位對應(yīng)一個十六進(jìn)制數(shù)字,即一個字節(jié)用兩位十六進(jìn)制數(shù)表示。比如,二進(jìn)制數(shù)11001000對應(yīng)著十六進(jìn)制數(shù)0xC8,而十六進(jìn)制數(shù)0x50對應(yīng)著二進(jìn)制數(shù)01010000。

我們可以通過PHP的sprintf函數(shù),將任意進(jìn)制的整數(shù)轉(zhuǎn)換為指定位數(shù)的進(jìn)制字符串。比如,將$int表示的整數(shù),轉(zhuǎn)換為8位的二進(jìn)制字符串,可以使用下面的代碼:

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

同樣的,將$int表示的整數(shù),轉(zhuǎn)換為2位的十六進(jìn)制字符串,可以使用下面的代碼:

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

二、把二進(jìn)制轉(zhuǎn)為圖片

下面,我們就來學(xué)習(xí)如何把二進(jìn)制字符串轉(zhuǎn)為PNG圖片。PNG圖片格式支持多種顏色的透明度,并且不會產(chǎn)生壓縮損失,因此在Web開發(fā)中被廣泛使用。

首先,我們需要定義一個$binary變量,保存由二進(jìn)制字符串轉(zhuǎn)換而來的字節(jié)數(shù)組。對于一張24位真彩色(RGB)的PNG圖片,它的像素值由3個字節(jié)的RGB值組成,因此,在轉(zhuǎn)換過程中,需要將二進(jìn)制字符串按照3個字節(jié)為一組進(jìn)行切分。切分完成之后,就可以將每一組字節(jié)分別作為RGB三通道的值,生成PNG圖片的像素數(shù)組。生成像素數(shù)組后,使用imagepng函數(shù)將像素數(shù)組寫入PNG圖片文件中,從而生成PNG圖片。

完整代碼如下:

//將二進(jìn)制字符串轉(zhuǎn)為PNG圖片
function binaryToPNG($binary, $width, $height) {
    //計算像素數(shù)組的長度(每個像素由3個字節(jié)的RGB值組成)
    $len = strlen($binary);
    $pixelLen = $len / 3;
    //通過imagecreatetruecolor函數(shù)創(chuàng)建一個PNG圖片的像素數(shù)組
    $im = imagecreatetruecolor($width, $height);
    //遍歷二進(jìn)制字符串,將每一組3個字節(jié)的值分別作為RGB三通道的值,并生成像素數(shù)組
    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函數(shù)將像素數(shù)組寫入PNG圖片文件中,從而生成PNG圖片
    header('Content-Type:image/png');
    imagepng($im);
    imagedestroy($im);
}

最后,我們還需要將二進(jìn)制字符串轉(zhuǎn)為PHP的字節(jié)數(shù)組,才能在binaryToPNG函數(shù)中對其進(jìn)行操作。對于一個形如"0100101010101001010..."的二進(jìn)制字符串,可以使用下面的代碼將其轉(zhuǎn)換為PHP的字節(jié)數(shù)組:

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

三、把圖片轉(zhuǎn)為二進(jìn)制

與將二進(jìn)制轉(zhuǎn)為圖片相對應(yīng),我們也需要將圖片轉(zhuǎn)為二進(jìn)制字符串。這個過程可以使用imagecreatefrompng函數(shù)將PNG圖片讀取為像素數(shù)組,再使用imagecolorat函數(shù)獲取每個像素的RGB值,最后將RGB值拼接成一個二進(jìn)制字符串。完整代碼如下:

//將PNG圖片轉(zhuǎn)為二進(jìn)制字符串
function pngToBinary($file) {
    //通過imagecreatefrompng函數(shù)將PNG圖片讀取為像素數(shù)組
    $im = imagecreatefrompng($file);
    $width = imagesx($im);
    $height = imagesy($im);
    $binary = '';
    //遍歷像素數(shù)組,獲取每個像素的RGB值,拼接成一組二進(jìn)制字符串
    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;
}

以上就是關(guān)于“php如何把二進(jìn)制轉(zhuǎn)為圖片”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI