Bagaimana untuk menukar binari kepada imej dalam php

PHPz
Lepaskan: 2023-04-04 15:42:01
asal
2589 orang telah melayarinya

Dengan kemajuan teknologi maklumat yang berterusan dan peningkatan Web 2.0, permintaan orang ramai untuk maklumat multimedia semakin tinggi dan lebih tinggi format gambar seperti PNG, JPG dan GIF telah menjadi bahagian yang amat diperlukan dalam kehidupan kita. Memandangkan kod PHP adalah bahasa yang paling banyak digunakan dalam pembangunan web, cara menukar binari kepada imej telah menjadi salah satu kemahiran asas yang perlu dikuasai oleh pengaturcara.

1. Penukaran antara binari dan heksadesimal

Sebelum mempelajari cara menukar binari kepada gambar, kita perlu menguasai penukaran bersama antara binari dan perenambelasan. Sekumpulan 8 bit perduaan, iaitu, satu bait sebagai unit, boleh mewakili integer antara 0 dan 255 dan setiap empat bit perduaan sepadan dengan nombor perenambelasan, iaitu, satu bait menggunakan dua digit perwakilan. Sebagai contoh, nombor perduaan 11001000 sepadan dengan nombor heksadesimal 0xC8, dan nombor perenambelasan 0x50 sepadan dengan nombor perduaan 01010000.

Kita boleh menggunakan fungsi sprintf PHP untuk menukar integer dalam mana-mana asas kepada rentetan asas dengan bilangan digit yang ditentukan. Sebagai contoh, untuk menukar integer yang diwakili oleh $int kepada rentetan binari 8 digit, anda boleh menggunakan kod berikut:

$bin = sprintf("%08b", $int);
Salin selepas log masuk

Begitu juga, untuk menukar integer yang diwakili oleh $int menjadi 2 digit rentetan perenambelasan Untuk rentetan binari, anda boleh menggunakan kod berikut:

$hex = sprintf("%02x", $int);
Salin selepas log masuk

2. Tukar binari kepada imej

Seterusnya, kita akan belajar cara menukar rentetan binari kepada imej PNG. Format imej PNG menyokong pelbagai warna ketelusan tanpa kehilangan mampatan, jadi ia digunakan secara meluas dalam pembangunan web.

Pertama, kita perlu mentakrifkan pembolehubah $binari untuk menyimpan tatasusunan bait yang ditukar daripada rentetan binari. Untuk imej PNG warna sebenar (RGB) 24-bit, nilai pikselnya terdiri daripada 3 bait nilai RGB Oleh itu, semasa proses penukaran, rentetan binari perlu dipotong kepada kumpulan 3 bait. Selepas pembahagian selesai, setiap kumpulan bait boleh digunakan sebagai nilai tiga saluran RGB untuk menjana tatasusunan piksel imej PNG. Selepas menjana tatasusunan piksel, gunakan fungsi imagepng untuk menulis tatasusunan piksel ke dalam fail imej PNG untuk menghasilkan imej PNG.

Kod lengkap adalah seperti berikut:

//将二进制字符串转为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(&#39;Content-Type:image/png&#39;);
    imagepng($im);
    imagedestroy($im);
}
Salin selepas log masuk

Akhir sekali, kita juga perlu menukar rentetan binari kepada tatasusunan bait PHP sebelum kita boleh mengendalikannya dalam fungsi binaryToPNG. Untuk rentetan binari dalam bentuk "0100101010101001010...", anda boleh menggunakan kod berikut untuk menukarnya menjadi tatasusunan bait PHP:

$binary = pack("B*", $binaryString);
Salin selepas log masuk

3 🎜>Sepadan dengan menukar binari kepada imej, kita juga perlu menukar imej kepada rentetan binari. Dalam proses ini, anda boleh menggunakan fungsi imagecreatefrompng untuk membaca imej PNG sebagai tatasusunan piksel, kemudian gunakan fungsi imagecolorat untuk mendapatkan nilai RGB bagi setiap piksel, dan akhirnya sambungkan nilai RGB ke dalam rentetan binari. Kod lengkap adalah seperti berikut:

4. Ringkasan
//将PNG图片转为二进制字符串
function pngToBinary($file) {
    //通过imagecreatefrompng函数将PNG图片读取为像素数组
    $im = imagecreatefrompng($file);
    $width = imagesx($im);
    $height = imagesy($im);
    $binary = &#39;&#39;;
    //遍历像素数组,获取每个像素的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;
}
Salin selepas log masuk

Artikel ini memperincikan cara menukar rentetan binari kepada imej PNG dan cara menukar imej PNG kepada rentetan binari. Melalui pembelajaran, kita bukan sahaja dapat menguasai kaedah penukaran bersama antara binari dan perenambelasan dalam PHP, tetapi juga cara mengendalikan gambar dalam kod PHP. Dalam pembangunan sebenar, kemahiran asas ini boleh membantu kami menyelesaikan operasi berkaitan multimedia dengan lebih baik dan memberikan sokongan yang kuat untuk pembangunan Web.

Atas ialah kandungan terperinci Bagaimana untuk menukar binari kepada imej dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!