2010-10-29 8 views
6

Ich verwende imagecreatefromjpeg, imagecreatefromgif und imagecreatefrompng Funktionen zum Erstellen von Miniaturansichten von image/jpeg, image/gif und image/png Mimes.Wie erstellt man eine Miniaturansicht der .BMP-Datei?

Ich möchte auch Miniaturansichten von .BMP Dateien erstellen.

Ich überprüfte eine Datei und fand heraus, dass ihre Pantomime image/x-ms-bmp ist.

Allerdings kann ich keine geeignete imagecreatefrom... Funktion finden.

Bitte vorschlagen.

+0

Ja, werfen Sie einen Blick auf diese PHP-Manpage - es gibt viele Lösungen angeboten: http://us.php.net/manual/en/function.imagecreatefromwbmp.php – leepowers

+0

Vielen Dank !! –

Antwort

11

PHP haben nicht in Bildfunktionen für BMP gebaut.

Es gab einige Versuche, Funktionen dafür zu erstellen.

Sie können eine robuste und gut dokumentierte Version in diesem Kommentar in der PHP-Dokumentation: http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214

Hier ist die Funktion von diesem Kommentar, ohne die hervorragenden Dokumentation, die aber viel mehr macht viel besser lesbar:

public function imagecreatefrombmp($p_sFile) 
{ 
    $file = fopen($p_sFile,"rb"); 
    $read = fread($file,10); 
    while(!feof($file)&&($read<>"")) 
     $read .= fread($file,1024); 
    $temp = unpack("H*",$read); 
    $hex = $temp[1]; 
    $header = substr($hex,0,108); 
    if (substr($header,0,4)=="424d") 
    { 
     $header_parts = str_split($header,2); 
     $width   = hexdec($header_parts[19].$header_parts[18]); 
     $height   = hexdec($header_parts[23].$header_parts[22]); 
     unset($header_parts); 
    } 
    $x    = 0; 
    $y    = 1; 
    $image   = imagecreatetruecolor($width,$height); 
    $body   = substr($hex,108); 
    $body_size  = (strlen($body)/2); 
    $header_size = ($width*$height); 
    $usePadding  = ($body_size>($header_size*3)+4); 
    for ($i=0;$i<$body_size;$i+=3) 
    { 
     if ($x>=$width) 
     { 
      if ($usePadding) 
       $i += $width%4; 
      $x = 0; 
      $y++; 
      if ($y>$height) 
       break; 
     } 
     $i_pos = $i*2; 
     $r  = hexdec($body[$i_pos+4].$body[$i_pos+5]); 
     $g  = hexdec($body[$i_pos+2].$body[$i_pos+3]); 
     $b  = hexdec($body[$i_pos].$body[$i_pos+1]); 
     $color = imagecolorallocate($image,$r,$g,$b); 
     imagesetpixel($image,$x,$height-$y,$color); 
     $x++; 
    } 
    unset($body); 
    return $image; 
} 
+0

Großartig! Danke vielmals!! –

+2

Funktioniert nicht mit x-ms-bmp, 'Hinweis: Nicht initialisierter String-Offset' macht verzerrte Bilder – Sem