您好,登錄后才能下訂單哦!
這篇“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è)資訊頻道。
免責(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)容。