2010-10-29 16 views
6

Uso le funzioni imagecreatefromjpeg, imagecreatefromgif e imagecreatefrompng per creare miniature di image/jpeg, image/gif e image/png mimi.Come creare una miniatura del file .BMP?

Vorrei anche creare miniature di file .BMP.

Ho controllato un file e ho scoperto che il suo mimo è image/x-ms-bmp.

Tuttavia, non riesco a trovare la funzione imagecreatefrom... appropriata.

Si prega di suggerire.

+0

Sì, dai un'occhiata a questa pagina di manuale PHP - ci sono molte soluzioni offerte: http://us.php.net/manual/en/function.imagecreatefromwbmp.php – leepowers

+0

Grazie mille !! –

risposta

11

PHP non sono dotati di funzioni di immagine per BMP.

Ci sono stati alcuni tentativi di creare funzioni per fare questo.

È possibile trovare una versione robusta e ben documentato in questo commento nella documentazione di PHP: http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214

Qui è la funzione da quel commento, senza la documentazione eccellente che rende molto più lungo ma molto più leggibile:

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

Ottimo! Molte grazie!! –

+2

Non funziona con x-ms-bmp, 'Avviso: offset stringa non inizializzato' che crea immagini distorte – Sem

Problemi correlati