2010-10-29 16 views
6

image/jpeg, image/gif ve image/png düğmelerinin minik resimlerini oluşturmak için imagecreatefromjpeg, imagecreatefromgif ve imagecreatefrompng işlevlerini kullanıyorum..BMP dosyasının küçük resmi nasıl oluşturulur?

Ayrıca .BMP dosyalarının küçük resimlerini oluşturmak istiyorum.

Bir dosya ekledim ve onun mimin image/x-ms-bmp olduğunu öğrendim. Ancak, uygun bir imagecreatefrom... işlevi bulamıyorum.

Lütfen öneriniz.

+0

Evet, bu PHP manpage'e bir göz atın - sunulan pek çok çözüm var: http://us.php.net/manual/en/function.imagecreatefromwbmp.php – leepowers

+0

Çok teşekkürler! –

cevap

11

PHP BMP resim işlevler inşa etmez.

Bunu yapmak için işlevler oluşturmak için birkaç girişimde bulunuldu.

PHP belgelerinde bu yorumunda sağlam ve iyi belgelenmiş bir sürümünü bulabilirsiniz: Burada http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214

çok daha uzun ama çok daha okunabilir hale getiren mükemmel belgeler olmadan bu yorumun fonksiyonudur:

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

Harika! Çok teşekkürler!! –

+2

x-ms-bmp ile çalışmaz, 'Uyarı: Başlatılmamış dize ofset'i çarpık görüntülere neden oluyor – Sem

İlgili konular