All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
asp.net利用RAR实现文件压缩解压缩_[Asp.Net教程]
谈谈新手如何学习PHP_php资料_编程技术
让你的ASP.NET虚拟主机也支持子网站_.net资料_编程技术
在SQL Server中使用NewID()产生随机集_[SQL Server教程]
Asp.net2.0实现多语言网页的方法_[Asp.Net教程]
IIS7,会重用那些不该重用,HttpHandler_.net资料_编程技术
你必须知道的.NET之对接口和抽象类_.net资料_编程技术
PHP连接远程MYSQL和MYSQL5.1中文乱码处理方法_php资料_编程技术
让GridView有新增记录的功能_[Asp.Net教程]
XP下安装SQL2000企业版_[SQL,Server教程]
Reading number is top 10 pictures
关于海盗的研究2
A man's favorite things1
50个至今影响世界的德国发明
真正的国产-非模拍 贵在是真实1
西方气质的东方美女1
Small QiShu -- ShuangShuangPan1
BingBingFan apple dew point photo gallery3
Chinese paper-cut grilles art appreciation1
Kim jong il's mistress, national beauty JinYuJi actor3
到底是谁撞谁呀?
Download software ranking
Sora aoi 120 minutes
金山office2007
Sora aoi's film--cangkong_Blue.Sky
Tram sex maniac 2 (H) rar bag1
美女游泳记
apache-tomcat-6.0.33
WebService在.NET中的实战应用教学视频 → 第2集
Detective task-the top secret prostitution files
I for your crazy
Ashlynn Video4
归海一刀 published in(发表于) 2014/2/10 6:51:17 Edit(编辑)
[GD]生成bmp格式的图片(imagebmp)_[PHP教程]

[GD]生成bmp格式的图片(imagebmp)_[PHP教程]

[GD]生成bmp格式的图片(imagebmp)_[PHP教程]

GD库里没有生成bmp图片的函数,所以自己写了一个,这个函数尚有一个压缩算法没有写,不过已经够用了。需要的同学可以看看。


int imagebmp ( resource image [, string filename [, int bit [, int compression]]] )


im: 图像资源
filename: 如果要另存为文件,请指定文件名,为空则直接在浏览器输出
bit: 图像质量(1、4、8、16、24、32位)
compression: 压缩方式,0为不压缩,1使用RLE8压缩算法进行压缩


注意:这个函数仍然需要GD库的支持。


Dem


im = imagecreatefrompng("test.png");
imagebmp(im);
imagedestroy(im);
Source:


/**
* 创建bmp格式图片
*
* @author: legend(legendsky@hotmail.com)
* @link: http://www.ugia.cn/?p=96
* @description: create Bitmap-File with GD library
* @version: 0.1
*
* @param resource im 图像资源
* @param string filename 如果要另存为文件,请指定文件名,为空则直接在浏览器输出
* @param integer bit 图像质量(1、4、8、16、24、32位)
* @param integer compression 压缩方式,0为不压缩,1使用RLE8压缩算法进行压缩
*
* @return integer
*/
function imagebmp(&im, filename = '', bit = 8, compression = 0)
{
if (!in_array(bit, array(1, 4, 8, 16, 24, 32)))
{
bit = 8;
}
else if (bit == 32) // tod32 bit
{
bit = 24;
}

bits = pow(2, bit);

// 调整调色板
imagetruecolortopalette(im, true, bits);
width = imagesx(im);
height = imagesy(im);
colors_num = imagecolorstotal(im);

if (bit <= 8)
{
// 颜色索引
rgb_quad = '';
for (i = 0; i < colors_num; i ++)
{
colors = imagecolorsforindex(im, i);
rgb_quad .= chr(colors['blue']) . chr(colors['green']) . chr(colors['red']) . "\0";
}

// 位图数据
bmp_data = '';

// 非压缩
if (compression == 0 || bit < 8)
{
if (!in_array(bit, array(1, 4, 8)))
{
bit = 8;
}

compression = 0;

// 每行字节数必须为4的倍数,补齐。
extra = '';
padding = 4 - ceil(width / (8 / bit)) % 4;
if (padding % 4 != 0)
{
extra = str_repeat("\0", padding);
}

for (j = height - 1; j >= 0; j --)
{
i = 0;
while (i < width)
{
bin = 0;
limit = width - i < 8 / bit ? (8 / bit - width + i) * bit : 0;

for (k = 8 - bit; k >= limit; k -= bit)
{
index = imagecolorat(im, i, j);
bin |= index << k;
i ++;
}

bmp_data .= chr(bin);
}

bmp_data .= extra;
}
}
// RLE8 压缩
else if (compression == 1 && bit == 8)
{
for (j = height - 1; j >= 0; j --)
{
last_index = "\0";
same_num = 0;
for (i = 0; i <= width; i ++)
{
index = imagecolorat(im, i, j);
if (index !== last_index || same_num > 255)
{
if (same_num != 0)
{
bmp_data .= chr(same_num) . chr(last_index);
}

last_index = index;
same_num = 1;
}
else
{
same_num ++;
}
}

bmp_data .= "\0\0";
}

bmp_data .= "\0\1";
}

size_quad = strlen(rgb_quad);
size_data = strlen(bmp_data);
}
else
{
// 每行字节数必须为4的倍数,补齐。
extra = '';
padding = 4 - (width * (bit / 8)) % 4;
if (padding % 4 != 0)
{
extra = str_repeat("\0", padding);
}

// 位图数据
bmp_data = '';

for (j = height - 1; j >= 0; j --)
{
for (i = 0; i < width; i ++)
{
index = imagecolorat(im, i, j);
colors = imagecolorsforindex(im, index);

if (bit == 16)
{
bin = 0 << bit;

bin |= (colors['red'] >> 3) << 10;
bin |= (colors['green'] >> 3) << 5;
bin |= colors['blue'] >> 3;

bmp_data .= pack("v", bin);
}
else
{
bmp_data .= pack("c*", colors['blue'], colors['green'], colors['red']);
}

// tod 32bit;
}

bmp_data .= extra;
}

size_quad = 0;
size_data = strlen(bmp_data);
colors_num = 0;
}

// 位图文件头
file_header = "BM" . pack("V3", 54 + size_quad + size_data, 0, 54 + size_quad);

// 位图信息头
info_header = pack("V3v2V*", 0x28, width, height, 1, bit, compression, size_data, 0, 0, colors_num, 0);

// 写入文件
if (filename != '')
{
fp = fopen("test.bmp", "wb");

fwrite(fp, file_header);
fwrite(fp, info_header);
fwrite(fp, rgb_quad);
fwrite(fp, bmp_data);
fclose(fp);

return 1;
}

// 浏览器输出
header("Content-Type: image/bmp");
echo file_header . info_header;
echo rgb_quad;
echo bmp_data;

return 1;
}
参考资料:BMP文件格式分析 (出处没有找到…)


原创文章,转载请注明出处。


出处:http://www.ugia.cn/?p=96







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.