Es gibt keine Funktion zum Generieren von BMP-Bildern in der GD-Bibliothek, daher habe ich selbst eine geschrieben. Diese Funktion verfügt auch über einen Komprimierungsalgorithmus, den ich noch nicht geschrieben habe, aber er reicht aus. Studierende, die es benötigen, können einen Blick darauf werfen.
int imagebmp (Ressource Bild [, Zeichenfolge Dateiname [, int $bit [, int Komprimierung]]])
$im: Bildressource
$Dateiname: Wenn Sie als Datei speichern möchten, geben Sie bitte den Dateinamen an. Wenn dieser leer ist, wird er direkt im Browser ausgegeben.
$bit: Bildqualität (1, 4, 8, 16, 24, 32 Bit)
$compression: Komprimierungsmethode, 0 bedeutet keine Komprimierung, 1 verwendet den RLE8-Komprimierungsalgorithmus zur Komprimierung.
Hinweis: Diese Funktion erfordert weiterhin die Unterstützung der GD-Bibliothek.
Demo:
$im = imagecreatefrompng("test.png");
imagebmp($im);
imagedestroy($im);
Quelle:
/**
* Erstellen Sie Bilder im BMP-Format
*
* @author: legend( [email protected] )
* @link: http://www.ugia.cn/?p=96
* @description: Bitmap-Datei mit GD-Bibliothek erstellen
* @Version: 0.1
*
* @param-Ressource $im Bildressource
* @param string $filename Wenn Sie als Datei speichern möchten, geben Sie bitte den Dateinamen an. Wenn dieser leer ist, wird er direkt im Browser ausgegeben.
* @param integer $bit Bildqualität (1, 4, 8, 16, 24, 32 Bit)
* @param integer $compression Komprimierungsmethode, 0 bedeutet keine Komprimierung, 1 verwendet den RLE8-Komprimierungsalgorithmus zur Komprimierung
*
* @return Ganzzahl
*/
Funktion imagebmp(&$im, $filename = '', $bit = 8, $compression = 0)
{
if (!in_array($bit, array(1, 4, 8, 16, 24, 32)))
{
$bit = 8;
}
else if ($bit == 32) // todo:32 bit
{
$bit = 24;
}
$bits = pow(2, $bit);
//Farbpalette anpassen
imagetruecolortopalette($im, true, $bits);
$width = imagesx($im);
$height = imagesy($im);
$colors_num = imagecolorstotal($im);
if ($bit <= 8)
{
// Farbindex
$rgb_quad = '';
for ($i = 0; $i < $colors_num; $i ++)
{
$colors = imagecolorsforindex($im, $i);
$rgb_quad .= chr($colors['blue']) .
}
// Bitmap-Daten
$bmp_data = '';
// unkomprimiert
if ($compression == 0 || $bit < 8)
{
if (!in_array($bit, array(1, 4, 8)))
{
$bit = 8;
}
$Kompression = 0;
//Die Anzahl der Bytes in jeder Zeile muss ein Vielfaches von 4 sein und muss vollständig sein.
$extra = '';
$padding = 4 - ceil($width / (8 / $bit)) % 4;
if ($padding % 4 != 0)
{
$extra = str_repeat("