当前位置: 网学 > 编程文档 > PHP > 正文

PHP缩略图等比例无损压缩,可填充空白区域补充色

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/06/22
($FILE[''file_type''] != 19778) return FALSE;
$BMP = unpack(''Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel''.
''/Vcompression/Vsize_bitmap/Vhoriz_resolution''.
''/Vvert_resolution/Vcolors_used/Vcolors_important'', fread($f1,40));
$BMP[''colors''] = pow(2,$BMP[''bits_per_pixel'']);
if ($BMP[''size_bitmap''] == 0) $BMP[''size_bitmap''] = $FILE[''file_size''] - $FILE[''bitmap_offset''];
$BMP[''bytes_per_pixel''] = $BMP[''bits_per_pixel'']/8;
$BMP[''bytes_per_pixel2''] = ceil($BMP[''bytes_per_pixel'']);
$BMP[''decal''] = ($BMP[''width'']*$BMP[''bytes_per_pixel'']/4);
$BMP[''decal''] -= floor($BMP[''width'']*$BMP[''bytes_per_pixel'']/4);
$BMP[''decal''] = 4-(4*$BMP[''decal'']);
if ($BMP[''decal''] == 4) $BMP[''decal''] = 0;
$PALETTE = array();
if ($BMP[''colors''] < 16777216)
{
$PALETTE = unpack(''V''.$BMP[''colors''], fread($f1,$BMP[''colors'']*4));
}
$IMG = fread($f1,$BMP[''size_bitmap'']);
$VIDE = chr(0);
$res = imagecreatetruecolor($BMP[''width''],$BMP[''height'']);
$P = 0;
$Y = $BMP[''height'']-1;
while ($Y >= 0)
{
$X=0;
while ($X < $BMP[''width''])
{
if ($BMP[''bits_per_pixel''] == 24)
$COLOR = unpack("V",substr($IMG,$P,3).$VIDE);
elseif ($BMP[''bits_per_pixel''] == 16)
{
$COLOR = unpack("n",substr($IMG,$P,2));
$COLOR = $PALETTE[$COLOR+1];
}
elseif ($BMP[''bits_per_pixel''] == 8)
{
$COLOR = unpack("n",$VIDE.substr($IMG,$P,1));
$COLOR = $PALETTE[$COLOR+1];
}
elseif ($BMP[''bits_per_pixel''] == 4)
{
$COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1));
if (($P*2)%2 == 0) $COLOR = ($COLOR >> 4) ; else $COLOR = ($COLOR & 0x0F);
$COLOR = $PALETTE[$COLOR+1];
}
elseif ($BMP[''bits_per_pixel''] == 1)
{
$COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1));
if (($P*8)%8 == 0) $COLOR = $COLOR >>7;
elseif (($P*8)%8 == 1) $COLOR = ($COLOR & 0x40)>>6;
elseif (($P*8)%8 == 2) $COLOR = ($COLOR & 0x20)>>5;
elseif (($P*8)%8 == 3) $COLOR = ($COLOR & 0x10)>>4;
elseif (($P*8)%8 == 4) $COLOR = ($COLOR & 0x8)>>3;
elseif (($P*8)%8 == 5) $COLOR = ($COLOR & 0x4)>>2;
elseif (($P*8)%8 == 6) $COLOR = ($COLOR & 0x2)>>1;
elseif (($P*8)%8 == 7) $COLOR = ($COLOR & 0x1);
$COLOR = $PALETTE[$COLOR+1];
}
else
return FALSE;
imagesetpixel($res,$X,$Y,$COLOR);
$X++;
$P += $BMP[''bytes_per_pixel''];
}
$Y--;
$P+=$BMP[''decal''];
}
fclose($f1);
return $res;
}
// BMP 保存函数,php本身无
function imagebmp ($im, $fn = false)
{
if (!$im) return false;
if ($fn === false) $fn = ''php://output'';
$f = fopen ($fn, "w");
if (!$f) return false;
$biWidth = imagesx ($im);
$biHeight = imagesy ($im);
$biBPLine = $biWidth * 3;
$biStride = ($biBPLine + 3) & ~3;
$biSizeImage = $biStride * $biHeight;
$bfOffBits = 54;
$bfSize = $bfOffBits + $biSizeImage;
fwrite ($f, ''BM'', 2);
fwrite ($f, pack (''VvvV'', $bfSize, 0, 0, $bfOffBits));
fwrite ($f, pack (''VVVvvVVVVVV'', 40, $biWidth, $biHeight, 1, 24, 0, $biSizeImage, 0, 0, 0, 0));
$numpad = $biStride - $biBPLine;
for ($y = $biHeight - 1; $y >= 0; --$y)
{
for ($x = 0; $x < $biWidth; ++$x)
{
$

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号