Il n'y a pas de fonction pour générer des images bmp dans la bibliothèque GD, j'en ai donc écrit une moi-même. Cette fonction possède également un algorithme de compression que je n'ai pas encore écrit, mais c'est suffisant. Les étudiants qui en ont besoin peuvent y jeter un œil.
int imagebmp (image ressource [, chaîne nom de fichier [, int $bit [, int compression]]] )
$im : ressource image
$filename : Si vous souhaitez enregistrer sous forme de fichier, veuillez spécifier le nom du fichier. S'il est vide, il sera affiché directement dans le navigateur.
$bit : qualité de l'image (1, 4, 8, 16, 24, 32 bits)
$compression : méthode de compression, 0 signifie pas de compression, 1 utilise l'algorithme de compression RLE8 pour la compression
Remarque : Cette fonction nécessite toujours le support de la bibliothèque GD.
Démo :
$im = imagecreatefrompng("test.png");
imagebmp($im);
imagedestroy($im);
Source:
/**
* Créer des images au format BMP
*
* @auteur : légende ( [email protected] )
* @lien : http://www.ugia.cn/?p=96
* @description : créer un fichier Bitmap avec la bibliothèque GD
* @version : 0.1
*
* Ressource @param $im ressource d'image
* @param string $filename Si vous souhaitez enregistrer sous forme de fichier, veuillez spécifier le nom du fichier. S'il est vide, il sera affiché directement dans le navigateur.
* @param entier $bit qualité d'image (1, 4, 8, 16, 24, 32 bits)
* @param integer $compression méthode de compression, 0 signifie aucune compression, 1 utilise l'algorithme de compression RLE8 pour la compression
*
* @return entier
*/
fonction imagebmp(&$im, $filename = '', $bit = 8, $compression = 0)
{
if (!in_array($bit, array(1, 4, 8, 16, 24, 32)))
{
$bit = 8 ;
}
sinon si ($bit == 32) // todo:32 bits
{
$bit = 24 ;
}
$bits = pow(2, $bit);
//Ajuster la palette de couleurs
imagetruecolortopalette($im, true, $bits);
$largeur = imagesx($im);
$hauteur = imagesy($im);
$colors_num = imagecolorstotal($im);
si ($bit <= 8)
{
// indice de couleur
$rgb_quad = '';
pour ($i = 0; $i < $colors_num; $i ++)
{
$colors = imagecolorsforindex($im, $i);
$rgb_quad .= chr($colors['bleu']) chr($colors['vert']) .
}
// données bitmap
$bmp_data = '';
// non compressé
si ($compression == 0 || $bit < 8)
{
si (!in_array($bit, tableau(1, 4, 8)))
{
$bit = 8 ;
}
$compression = 0 ;
//Le nombre d'octets dans chaque ligne doit être un multiple de 4 et doit être complété.
$extra = '';
$padding = 4 - plafond ($width / (8 / $bit)) % 4;
si ($padding % 4 != 0)
{
$extra = str_repeat("