2010-10-29 80 views
6

Tôi sử dụng các chức năng imagecreatefromjpeg, imagecreatefromgifimagecreatefrompng để tạo hình thu nhỏ của image/jpeg, image/gifimage/png lần.Cách tạo hình thu nhỏ của tệp .BMP?

Tôi cũng muốn tạo hình thu nhỏ của .BMP tệp.

Tôi đã kiểm tra một tệp và phát hiện ra rằng tệp của nó là image/x-ms-bmp.

Tuy nhiên, tôi không thể tìm thấy hàm imagecreatefrom... thích hợp.

Vui lòng đề xuất.

+0

Có, hãy xem trang manpage PHP này - có rất nhiều giải pháp được cung cấp: http://us.php.net/manual/en/function.imagecreatefromwbmp.php – leepowers

+0

Cảm ơn rất nhiều !! –

Trả lời

11

PHP không đã xây dựng trong các chức năng hình ảnh cho BMP.

Đã có một vài lần thử tạo chức năng để thực hiện việc này.

Bạn có thể tìm thấy một phiên bản mạnh mẽ và cũng ghi nhận trong nhận xét này trong tài liệu PHP: http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214

Dưới đây là chức năng từ đó bình luận mà không có tài liệu xuất sắc mà làm lâu hơn nữa nhưng nhiều hơn nữa có thể đọc được:

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

Tuyệt vời! Cảm ơn rất nhiều!! –

+2

Không hoạt động với x-ms-bmp, 'Thông báo: Chuỗi không được bù đắp bù đắp' làm hình ảnh bị méo – Sem

Các vấn đề liên quan