PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 28-03-2010 14:14:19

linkman
Membre
Inscription : 28-03-2010
Messages : 13

Problème imagecreatefrom avec le format BMP

Bonjour à tous,

Cela fait plusieurs heures que je cherche une solution à mon problème et je n'arrive pas à le résoudre. Je dois afficher une image que l'on m'a fourni en BMP (je ne peux pas la convertir sous photoshop car je n'ai pas les droits pour le faire  sad ). J'ai vu sur plusieurs site que la fonction Imagecreatefrombmp ne fonctionnait pas en PHP. J'ai trouvé un petit tuto mais il ne fonctionne pas sad.

Sur la page ou j'affiche mon image:
[c]
<?php if($result["Image"]!=NULL){?><img src="logo_petit.php?logo=<?php echo $result["Image"];?>" alt="image"/>
[/c]
Dans $result["Image"]; se trouve : ma_maison.bmp

La page logo_petit.php:


$logo=$_GET["logo"];
    $path = "../trait/logos/" . $logo;
  $extension = substr( $logo, -3 );
  $extension = strtolower( $extension );
        if($extension="bmp")
  {
    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
        $header = unpack("vtype/Vlength/v2reserved/Vbegin/Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant", $bmp);
        extract($header);
        // Lecture de l'image
        $im = imagecreatetruecolor($width,$height);
        $i = 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;
            }
            $col = imagecolorexact($im,$r,$v,$b);
            if ($col == -1) $col = imagecolorallocate($im,$r,$v,$b);
            imagesetpixel($im,$x,$y,$col);
          }
          $i += $diff;
        }
        // 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);
        }
      }
      $header = pack("Vv2VVVVvvVVVVVV",strlen($pix)+54,0,0,54,40,imagesx($im),imagesy($im),1,24,0,strlen($pix),0,0,0,0);
      if ($dir != "") {
        $inF = fopen($dir,"w");
        fwrite($inF,"BM".$header.$pix);
        fclose($inF);
      } else echo "BM".$header.$pix;
    }
       
    header('Content-type: image/bmp');
    $x = 55; //largeur de mon image en PIXELS uniquement !
    $y = 25; //hauteur de mon image en PIXELS uniquement !
    $image = imagecreatefrombmp($path);
    $size = getimagesize($path);
    $img_mini = imagecreatetruecolor ($x, $y);
    imagecopyresampled ($img_mini,$image,0,0,0,0,$x,$y,$size[0],$size[1]);
    imagebmp($img_mini);
    imagedestroy($img_mini);
  }
 

J'espère que vous pourrez m'aider car je suis tout perdu sad

Dernière modification par linkman (28-03-2010 14:15:53)

Hors ligne

#2 28-03-2010 14:44:50

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Problème imagecreatefrom avec le format BMP

En quoi est enregistré ton image BMP ? Il existe plusieurs types d'encodages dans le domaine de l'image.

Hors ligne

#3 28-03-2010 15:15:55

linkman
Membre
Inscription : 28-03-2010
Messages : 13

Re : Problème imagecreatefrom avec le format BMP

Aucune idée, les images n'ont pas été faites par moi. Tous ce que je sais c'est :

Espace colorimétrique : RGB
Canal Alpha : Non
Profondeur de couleur : 32
Nombre de trames : 1

Dernière modification par linkman (28-03-2010 15:26:24)

Hors ligne

#4 28-03-2010 18:23:54

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Problème imagecreatefrom avec le format BMP

Hum en y regardant de plus près je n'ai pas trouvé où s'initialisait la variable $bits qui semble correspondre à la profondeur de couleur justement.
Après il y a des fonctions que je ne connais pas donc peut être est-ce le cas. Mais testes la pour voir, on ne sait jamais.
Si c'est le cas il s'agirait d'un oubli dans la gestion de la fonction.

Hors ligne

Pied de page des forums