imagecreatefrombmp() + imagebmp() 搞定bmp缩略图

来源:互联网 发布:sql server 2000怎么用 编辑:程序博客网 时间:2024/05/18 02:01
//bmp class BMP {     public static function imagebmp(&$img, $filename = false)     {       return imagebmp($img, $filename);     }     public static function imagecreatefrombmp($filename)     {       return imagecreatefrombmp($filename);     } }function imagebmp(&$img, $filename = false) {   $wid = imagesx($img);   $hei = imagesy($img);   $wid_pad = str_pad(”, $wid % 4, “\0″);   $size = 54 + ($wid + $wid_pad) * $hei;   //prepare & save header   $header['identifier']        = ‘BM’;   $header['file_size']        = dword($size);   $header['reserved']            = dword(0);   $header['bitmap_data']        = dword(54);   $header['header_size']        = dword(40);   $header['width']            = dword($wid);   $header['height']            = dword($hei);   $header['planes']            = word(1);   $header['bits_per_pixel']    = word(24);   $header['compression']        = dword(0);   $header['data_size']        = dword(0);   $header['h_resolution']        = dword(0);   $header['v_resolution']        = dword(0);   $header['colors']            = dword(0);   $header['important_colors']    = dword(0);  if ($filename)  {     $f = fopen($filename, “wb”);     foreach ($header AS $h)     {       fwrite($f, $h);     }     //save pixels     for ($y=$hei-1; $y>=0; $y–)     {       for ($x=0; $x<$wid; $x++)       {         $rgb = imagecolorat($img, $x, $y);         fwrite($f, byte3($rgb));       }       fwrite($f, $wid_pad);     }   fclose($f); } else {   foreach ($header AS $h)   {      echo $h;   }//save pixels for ($y=$hei-1; $y>=0; $y–) { for ($x=0; $x<$wid; $x++) { $rgb = imagecolorat($img, $x, $y); echo byte3($rgb); } echo $wid_pad; } } }function imagecreatefrombmp($filename) { $f = fopen($filename, “rb”);//read header $header = fread($f, 54); $header = unpack(    ‘c2identifier/Vfile_size/Vreserved/Vbitmap_data/Vheader_size/’ . ‘Vwidth/Vheight/vplanes/vbits_per_pixel/Vcompression/Vdata_size/’. ‘Vh_resolution/Vv_resolution/Vcolors/Vimportant_colors’, $header);if ($header['identifier1'] != 66 or $header['identifier2'] != 77) { die(‘Not a valid bmp file’); }if ($header['bits_per_pixel'] != 24) { die(‘Only 24bit BMP images are supported’); }$wid2 = ceil((3*$header['width']) / 4) * 4;$wid = $header['width']; $hei = $header['height'];$img = imagecreatetruecolor($header['width'], $header['height']);//read pixels for ($y=$hei-1; $y>=0; $y–) { $row = fread($f, $wid2); $pixels = str_split($row, 3); for ($x=0; $x<$wid; $x++) { imagesetpixel($img, $x, $y, dwordize($pixels[$x])); } } fclose($f);return $img; }function dwordize($str) { $a = ord($str[0]); $b = ord($str[1]); $c = ord($str[2]); return $c*256*256 + $b*256 + $a; }function byte3($n) { return chr($n & 255) . chr(($n >> 8 ) & 255) . chr(($n >> 16) & 255); } function dword($n) { return pack(“V”, $n); } function word($n) { return pack(“v”, $n); }


原创粉丝点击