分享
 
 
 

读取24位BMP图像并生成JPG缩略图(一)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

前言

在任何一个综合性网站,我们往往需要上传一些图片资料。但随着高分辨率DC的普及,上传的图片容量会很大,比如300万象素DC出来的文件基本不下600K。为了管理方便,大家可能不愿意每次都用ACDsee修改它,而直接上传到服务器。但是这种做法在客户端看来就没有那么轻松了,对于拨号上网的用户简直是一场恶梦,虽然你可以在图片区域设置wide和high!

上一篇文章中(http://www.csdn.net/Develop/Read_Article.asp?Id=27417)我主要介绍了JPG(JEPG)、GIF、PNG图像的读取及压缩方法,遗憾的是不支持BMP图像。本文一鼓作气、再接再厉,一举解决了这个问题!

程序代码

package BMP;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.image.BufferedImage;

import java.awt.image.MemoryImageSource;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class BMPReader{

public String Reader(){

Image image; //构造一个目标图

String result=""; //返回结果

try{

FileInputStream fs=new FileInputStream("/test.BMP");

int bflen=14;

byte bf[]=new byte[bflen];

fs.read(bf,0,bflen); //读取14字节BMP文件头

int bilen=40;

byte bi[]=new byte[bilen];

fs.read(bi,0,bilen); //读取40字节BMP信息头

// 获取一些重要数据

int nwidth=(((int)bi[7]&0xff)<<24) //源图宽度

| (((int)bi[6]&0xff)<<16)

| (((int)bi[5]&0xff)<<8)

| (int)bi[4]&0xff;

System.out.println("宽:"+nwidth);

int nheight=(((int)bi[11]&0xff)<<24) //源图高度

| (((int)bi[10]&0xff)<<16)

| (((int)bi[9]&0xff)<<8)

| (int)bi[8]&0xff;

System.out.println("高:"+nheight);

//位数

int nbitcount=(((int)bi[15]&0xff)<<8) | (int)bi[14]&0xff;

System.out.println("位数:"+nbitcount);

//源图大小

int nsizeimage=(((int)bi[23]&0xff)<<24)

| (((int)bi[22]&0xff)<<16)

| (((int)bi[21]&0xff)<<8)

| (int)bi[20]&0xff;

System.out.println("源图大小:"+nsizeimage);

//对24位BMP进行解析

if(nbitcount==24){

int npad=(nsizeimage/nheight)-nwidth*3;

int ndata[]=new int[nheight*nwidth];

byte brgb[]=new byte[(nwidth+npad)*3*nheight];

fs.read (brgb,0,(nwidth+npad)*3*nheight);

int nindex=0;

for(int j=0;j<nheight;j++){

for(int i=0;i<nwidth;i++){

ndata [nwidth*(nheight-j-1)+i]=

(255&0xff)<<24

| (((int)brgb[nindex+2]&0xff)<<16)

| (((int)brgb[nindex+1]&0xff)<<8)

| (int)brgb[nindex]&0xff;

nindex+=3;

}

nindex+=npad;

}

Toolkit kit=Toolkit.getDefaultToolkit();

image=kit.createImage(new MemoryImageSource(nwidth,nheight,

ndata,0,nwidth));

result="从BMP得到图像image";

System.out.println("从BMP得到图像image");

}else{

result="不是24位BMP,失败!";

System.out.println("不是24位BMP,失败!");

image=(Image)null;

}

fs.close(); //关闭输入流

//开始进行图像压缩(对image对象进行操作)

int wideth=image.getWidth(null); //得到源图宽

int height=image.getHeight(null); //得到源图长

BufferedImage tag=new BufferedImage(wideth/2,height/2,BufferedImage.TYPE_INT_RGB);

tag.getGraphics().drawImage(image,0,0,wideth/2,height/2,null); //绘制缩小后的图

FileOutputStream out=new FileOutputStream("/newfile.jpg"); //输出到文件流

JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);

encoder.encode(tag); //进行JPEG编码

out.close(); //关闭输出流

}catch (Exception e){

System.out.println(e);

}

return result;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有