Vous êtes ici Codes PHP et MySQL > GD-Graphiques > Fonctions imagecreatefrombmp et imagebmp

 

Fonctions imagecreatefrombmp et imagebmp

La fonction imagecreatefrombmp renvoie un identifiant comme imagecreate en créant une image à partir d'un fichier bmp 16, 24 ou 32 bits.
La fonction imagebmp affiche une image au format bmp 24 bits.
 
kurt67
Site de l'auteur voir
[2] sources en PHP voir
Code vu 11425 fois
Enregistré le 14 Avril 2005
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Fonctions imagecreatefrombmp et imagebmp
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Fonctions imagecreatefrombmp et imagebmp                  */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts120-PHP.htm              */
/* Auteur         : kurt67                                                    */
/* Date édition   : 14 Avril 2005                                             */
/* Website auteur : http://www.phpsources.org                                 */
/*                                                                            */
/******************************************************************************/

function imagecreatefrombmp($dir) {
  $bmp "";
  if (file_exists($dir)) {
    $file fopen($dir,"r");
    while(!feof($file)) $bmp .= fgets($file,filesize($dir));
    if (substr($bmp,0,2) == "BM") {
      // Lecture du header
  $chaine "vtype/Vlength/v2reserved/Vbegin/Vsize/Vwidth/Vheight/vplanes";
  $chaine .= "/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant";
                        $header unpack("$chaine"$bmp);
                        
      extract($header);
      // Lecture de l'image
      $im imagecreatetruecolor($width,$height);
      $i 0;
      $e 0;
      $diff floor(($imagesize - ($width*$height*($bits/8)))/$height);
      for($y=$height-1;$y>=0;$y--) {
        for($x=0;$x<$width;$x++) {
          if ($bits == 32) {
            $b ord(substr($bmp,$begin+$i,1));
            $v ord(substr($bmp,$begin+$i+1,1));
            $r ord(substr($bmp,$begin+$i+2,1));
            $i += 4;
          } else if ($bits == 24) {
            $b ord(substr($bmp,$begin+$i,1));
            $v ord(substr($bmp,$begin+$i+1,1));
            $r ord(substr($bmp,$begin+$i+2,1));
            $i += 3;
          } else if ($bits == 16) {
            $tot1 decbin(ord(substr($bmp,$begin+$i,1)));
            while(strlen($tot1)<8$tot1 "0".$tot1;
            $tot2 decbin(ord(substr($bmp,$begin+$i+1,1)));
            while(strlen($tot2)<8$tot2 "0".$tot2;
            $tot $tot2.$tot1;
            $r bindec(substr($tot,1,5))*8;
            $v bindec(substr($tot,6,5))*8;
            $b bindec(substr($tot,11,5))*8;
            $i += 2;
          } else if ($bits == 1) {
            $tot decbin(ord(substr($bmp,$begin+$i,1)));
            while(strlen($tot)<8$tot "0".$tot;
            $ind substr($tot,$e,1);
            if ($ind) { $r=255;$v=255;$b=255;
            } else { $r=0;$v=0;$b=0; }
            $e++;
            if ($e == 8) {
              $e 0;
              $i++;
            }
          }
          $col imagecolorexact($im,$r,$v,$b);
          if ($col == -1$col imagecolorallocate($im,$r,$v,$b);
          imagesetpixel($im,$x,$y,$col);
        }
        // $i += $diff;
        $i += 1;
        $e 0;
        echo $e;
      }
      // retourne l'image
      return $im;
      imagedestroy($im);
    } else return false;
  } else return false;
}

function imagebmp($im,$dir="") {
  $pix "";
  for($y=imagesy($im)-1;$y>=0;$y--) {
    for($x=0;$x<imagesx($im);$x++) {
      $rgb ImageColorAt($im$x$y);
      $r = ($rgb >> 16) & 0xFF;
      $g = ($rgb >> 8) & 0xFF;
      $b $rgb 0xFF;
      $pix .= pack("C3",$b,$g,$r);
    }
  }
  $ix strlen($pix);
  $ix1 imagesx($im);

$header=pack("v2",$ix)+54,0,0,54,40,$ix1,imagesy($im),1,24,0,$ix,0,0,0,0);
  if ($dir != "") {
    $inF fopen($dir,"w");
    fwrite($inF,"BM".$header.$pix);
    fclose($inF);
  } else echo "BM".$header.$pix;
}

function infosbmp($dir) {
  $bmp "";
$chaine="vtype/Vlength/v2reserved/Vbegin/Vsize/Vwidth/Vheight/vplanes/vbits";
     $chaine .= "/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant";
        if (file_exists($dir)) {
    $file fopen($dir,"r");
    while(!feof($file)) $bmp .= fgets($file,filesize($dir));
    if (substr($bmp,0,2) == "BM") return unpack("$chaine"$bmp);
    else return "Fichier bitmap non valide";
  } else return "Fichier non trouvé";
}


if (!empty($_POST["dir"])) $dir $_POST["dir"];
else $dir "test.bmp";

echo '<form method="post"><input type="text" name="dir" value="'.$dir.'">
<input type="submit" value="load"></form>';

$infos infosbmp($dir);
if (is_array($infos)) {
  extract($infos);
  echo "Taille totale en octects : ".$length."<br>";
  echo "Taille du header en octects : ".$begin."<br>";
  echo "Taille de l'image en octects : ".$imagesize."<br>";
  echo "Dimensions de l'image : ".$width."*".$height."<br>";
  echo "Bits par pixel : ".$bits."<br>";
  echo "compression : ".$compression."<br>";
  echo "Résolution horizontale en pixels-per-meter  : ".$xres."<br>";
  echo "Résolution verticale en pixels-per-meter  : ".$yres."<br>";
  echo "Nombre de couleurs utilisées : ".$ncolor."<br>";
  echo "Nombre de couleurs importantes (0 = toutes) : ".$important."<br>";
  $im imagecreatefrombmp($dir);
  imagebmp($im,"test.bmp");
echo"<img src=\"test.bmp\">Nombre de couleurs: ".imagecolorstotal($im)."<br>";
  imagedestroy($im);
  echo "Image affichée au format bmp.<br>";
} else echo $infos;
?>

 

Fonctions du code

: Vérifie si un fichier ou un dossier existe - (PHP 4, PHP 5)
: Ouvre un fichier ou une URL - (PHP 4, PHP 5)
: Teste la fin du fichier - (PHP 4, PHP 5)
: Récupère la ligne courante sur laquelle se trouve le pointeur du fichier - (PHP 4,...
: Lit la taille d'un fichier - (PHP 4, PHP 5)
: Retourne un segment de chaîne - (PHP 4, PHP 5)
: Déconditionne des données depuis une chaîne binaire - (PHP 4, PHP 5)
: Importe les variables dans la table des symboles - (PHP 4, PHP 5)
: Crée une nouvelle image en couleurs vraies - (PHP 4 >= 4.0.6, PHP 5)
: Arrondit à l'entier inférieur - (PHP 4, PHP 5)
: Retourne le code ASCII d'un caractère - (PHP 4, PHP 5)
: Convertit de décimal en binaire - (PHP 4, PHP 5)
: Calcule la taille d'une chaîne - (PHP 4, PHP 5)
: Convertit de binaire en décimal - (PHP 4, PHP 5)
: Retourne l'index de la couleur donnée - (PHP 4, PHP 5)
: Alloue une couleur pour une image - (PHP 4, PHP 5)
: Dessine un pixel - (PHP 4, PHP 5)
: Affiche une chaîne de caractères - (PHP 4, PHP 5)
: Détruit une image - (PHP 4, PHP 5)
: Retourne la hauteur de l'image - (PHP 4, PHP 5)
: Retourne la largeur d'une image - (PHP 4, PHP 5)
: Retourne l'index de la couleur d'un pixel donné - (PHP 4, PHP 5)
: Compacte des données dans une chaîne binaire - (PHP 4, PHP 5)
: Écrit un fichier en mode binaire - (PHP 4, PHP 5)
: Ferme un fichier - (PHP 4, PHP 5)
: Détermine si une variable contient une valeur non nulle - (PHP 4, PHP 5)
: Détermine si une variable est un tableau - (PHP 4, PHP 5)
: Calcule le nombre de couleurs d'une palette - (PHP 4, PHP 5)
Commentaires
Salut mec !

Merci pour ta fonction, mais je crois qu'il y a une toute petite erreur :

à la ligne 78 à 81, il faudrait plutôt mettre :

$i += $diff;
$e = 0;


Je l'ai testé en 32 et 24 bits et ça marche nikel!

Voilà =)
 
humm, ça me fait une erreur ligne 103.

Un problème de , semble t'il.

Quelqu'un à une idée ?
 
Il faut $header=pack("v2",$ix+54,0,0,54,40,$ix1,imagesy($im),1,24,0,$ix,0,0,0,0);
et non $header=pack("v2",$ix+54),0,0,54,40,$ix1,imagesy($im),1,24,0,$ix,0,0,0,0);

Sinon j'ai un bug car l'utilisation de imagecreatefrombmp
me donne :
Warning: imagesx(): supplied argument is not a valid Image resource in /home/img/inc/fonctions_img.php on line 280
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Librairie PHP

Connexion

 
 

GD-Graphiques

 
 

PHP

 
 
 
 
    Offres d'emploi

Plus de 500 offres d'emploi PHP/MySQL

Offres d'emploi
 
    Editeur PHP
 
        Publicité