Tidak ada fungsi untuk menghasilkan gambar bmp di perpustakaan GD, jadi saya menulisnya sendiri. Fungsi ini juga memiliki algoritma kompresi yang belum saya tulis, tetapi sudah cukup. Siswa yang membutuhkannya dapat melihatnya.
int imagebmp (gambar sumber daya [, nama file string [, int $bit [, kompresi int]]] )
$im: sumber daya gambar
$filename: Jika ingin menyimpan sebagai file, silakan tentukan nama file. Jika kosong, maka akan langsung ditampilkan di browser.
$bit: kualitas gambar (1, 4, 8, 16, 24, 32 bit)
$kompresi: metode kompresi, 0 berarti tidak ada kompresi, 1 menggunakan algoritma kompresi RLE8 untuk kompresi.
Catatan: Fungsi ini masih memerlukan dukungan perpustakaan GD.
Demo:
$im = imagecreatefrompng("test.png");
gambarbmp($im);
penghancuran gambar($im);
Sumber:
/**
* Buat gambar format bmp
*
* @penulis: legenda( [email protected] )
* @tautan: http://www.ugia.cn/?p=96
* @deskripsi: buat File Bitmap dengan perpustakaan GD
* @versi: 0.1
*
* @param sumber daya $im sumber daya gambar
* @param string $filename Jika ingin menyimpan sebagai file, silakan tentukan nama file. Jika kosong, maka akan langsung ditampilkan di browser.
* @param integer $bit kualitas gambar (1, 4, 8, 16, 24, 32 bit)
* @param integer $ metode kompresi kompresi, 0 berarti tidak ada kompresi, 1 menggunakan algoritma kompresi RLE8 untuk kompresi
*
* @mengembalikan bilangan bulat
*/
fungsi imagebmp(&$im, $namafile = '', $bit = 8, $kompresi = 0)
{
jika (!in_array($bit, array(1, 4, 8, 16, 24, 32)))
{
$bit = 8;
}
else if ($bit == 32) // tugas:32 bit
{
$bit = 24;
}
$bit = kekuatan(2, $bit);
//Sesuaikan palet warna
imagetruecolortopalette($im, true, $bit);
$lebar = gambarx($im);
$tinggi = gambar($im);
$warna_angka = gambarwarnatotal($im);
jika ($bit <= 8)
{
// indeks warna
$rgb_quad = '';
untuk ($i = 0; $i < $warna_num; $i ++)
{
$warna = gambarwarnaforindex($im, $i);
$rgb_quad .= chr($warna['biru']) .chr($warna['hijau']) .
}
// data bitmap
$bmp_data = '';
// tidak terkompresi
if ($kompresi == 0 || $bit < 8)
{
jika (!in_array($bit, array(1, 4, 8)))
{
$bit = 8;
}
$kompresi = 0;
//Jumlah byte pada setiap baris harus kelipatan 4 dan harus diisi.
$ekstra = '';
$padding = 4 - ceil($lebar / (8 / $bit)) % 4;
jika ($padding % 4 != 0)
{
$ekstra = str_repeat("