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

//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); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值