Cet article présente principalement la méthode de traitement PHP des images au format bmp. Il analyse les fonctions associées et les techniques d'utilisation de PHP exploitant les images au format bmp sur la base d'exemples spécifiques. Les amis dans le besoin peuvent se référer à
comme suit :
Au cours de la journée, QA a souligné qu'il y avait un problème avec le téléchargement des images du projet, notamment : le téléchargement a réussi, mais l'aperçu a échoué. Après y être allé, j'ai téléchargé quelques autres photos à télécharger, puis je lui ai demandé soigneusement quelle photo il avait téléchargé, et après l'avoir lue, je l'ai imprimée en utilisant la fonction getimagesize
.
Array ( [0] => 494 [1] => 260 [2] => 6 [3] => width="494" height="260" [bits] => 24 [mime] => image/x-ms-bmp )
Regardez attentivement. Le mime du tableau imprimé ci-dessus est image/x-ms-bmp, qui est au format bmp, je pense. php. La bibliothèque gd ne gérait pas cette fonction. Plus tard, dans le fichier de configuration, je n'ai pas pu télécharger tant que le mime était celui-ci.
Après mon retour dans la soirée, j'ai recherché des méthodes liées au traitement php bmp sur Internet, et je les ai finalement trouvées dans stackoverflow. Le message disait qu'il existe une méthode ImageCreateFromBMP
pour saisir les commentaires de fonction. à propos de imagecreate sur le site officiel. Tout d'abord, appelez cette fonction pour les fichiers au format bmp, puis enregistrez-les avec imagejpeg. Plus tard, je l'ai essayé et j'ai découvert que imagepng fonctionnait également.
<?php function ImageCreateFromBMP($filename) { //Ouverture du fichier en mode binaire if (!$f1 = fopen($filename, "rb")) return FALSE; //1 : Chargement des ent�tes FICHIER $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1, 14)); if ($FILE['file_type'] != 19778) return FALSE; //2 : Chargement des ent�tes BMP $BMP = unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel' . '/Vcompression/Vsize_bitmap/Vhoriz_resolution' . '/Vvert_resolution/Vcolors_used/Vcolors_important', fread($f1, 40)); $BMP['colors'] = pow(2, $BMP['bits_per_pixel']); if ($BMP['size_bitmap'] == 0) $BMP['size_bitmap'] = $FILE['file_size'] - $FILE['bitmap_offset']; $BMP['bytes_per_pixel'] = $BMP['bits_per_pixel'] / 8; $BMP['bytes_per_pixel2'] = ceil($BMP['bytes_per_pixel']); $BMP['decal'] = ($BMP['width'] * $BMP['bytes_per_pixel'] / 4); $BMP['decal'] -= floor($BMP['width'] * $BMP['bytes_per_pixel'] / 4); $BMP['decal'] = 4 - (4 * $BMP['decal']); if ($BMP['decal'] == 4) $BMP['decal'] = 0; //3 : Chargement des couleurs de la palette $PALETTE = array(); if ($BMP['colors'] < 16777216) { $PALETTE = unpack('V' . $BMP['colors'], fread($f1, $BMP['colors'] * 4)); } //4 : Cr�ation de l'image $IMG = fread($f1, $BMP['size_bitmap']); $VIDE = chr(0); $res = imagecreatetruecolor($BMP['width'], $BMP['height']); $P = 0; $Y = $BMP['height'] - 1; while ($Y >= 0) { $X = 0; while ($X < $BMP['width']) { if ($BMP['bits_per_pixel'] == 24) $COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE); elseif ($BMP['bits_per_pixel'] == 16) { $COLOR = unpack("n", substr($IMG, $P, 2)); $COLOR[1] = $PALETTE[$COLOR[1] + 1]; } elseif ($BMP['bits_per_pixel'] == 8) { $COLOR = unpack("n", $VIDE . substr($IMG, $P, 1)); $COLOR[1] = $PALETTE[$COLOR[1] + 1]; } elseif ($BMP['bits_per_pixel'] == 4) { $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1)); if (($P * 2) % 2 == 0) $COLOR[1] = ($COLOR[1] >> 4); else $COLOR[1] = ($COLOR[1] & 0x0F); $COLOR[1] = $PALETTE[$COLOR[1] + 1]; } elseif ($BMP['bits_per_pixel'] == 1) { $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1)); if (($P * 8) % 8 == 0) $COLOR[1] = $COLOR[1] >> 7; elseif (($P * 8) % 8 == 1) $COLOR[1] = ($COLOR[1] & 0x40) >> 6; elseif (($P * 8) % 8 == 2) $COLOR[1] = ($COLOR[1] & 0x20) >> 5; elseif (($P * 8) % 8 == 3) $COLOR[1] = ($COLOR[1] & 0x10) >> 4; elseif (($P * 8) % 8 == 4) $COLOR[1] = ($COLOR[1] & 0x8) >> 3; elseif (($P * 8) % 8 == 5) $COLOR[1] = ($COLOR[1] & 0x4) >> 2; elseif (($P * 8) % 8 == 6) $COLOR[1] = ($COLOR[1] & 0x2) >> 1; elseif (($P * 8) % 8 == 7) $COLOR[1] = ($COLOR[1] & 0x1); $COLOR[1] = $PALETTE[$COLOR[1] + 1]; } else return FALSE; imagesetpixel($res, $X, $Y, $COLOR[1]); $X++; $P += $BMP['bytes_per_pixel']; } $Y--; $P+=$BMP['decal']; } //Fermeture du fichier fclose($f1); return $res; } $pic = '2.bmp'; $res = ImageCreateFromBMP($pic); imagepng($res, '1.png'); imagejpeg($res, '1.jpeg');
bmpPhoto php sera bmp images en jpg et autres images dans n'importe quel format
php utilise la bibliothèque GD pour générer des images au format bmp (imagebmp)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!