优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx

上传人:b****6 文档编号:18807807 上传时间:2023-01-01 格式:DOCX 页数:5 大小:56.32KB
下载 相关 举报
优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx_第1页
第1页 / 共5页
优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx_第2页
第2页 / 共5页
优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx_第3页
第3页 / 共5页
优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx_第4页
第4页 / 共5页
优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx

《优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx(5页珍藏版)》请在冰豆网上搜索。

优就业Android教程Android图片压缩实现过程及代码Word文档格式.docx

this.nativeInt=nativeInt;

}

finalintnativeInt;

第二个参数表示压缩的质量,注意这个是压缩的关键,它的取值是0到100,越小表示压缩的越厉害,第三个参数表示把压缩的数据写入了outputstream流中。

OK,来看一个例子:

publicbyte[]compressBitmap(Bitmap 

bitmap,intmax){

intquality=100;

ByteArrayOutputStreambyteArrayOutputStream=newByteArrayOutputStream();

press(Bitmap.CompressFormat.JPEG,quality,byteArrayOutputStream);

while(byteArrayOutputStream.toByteArray().length/1024>

max){

byteArrayOutputStream.reset();

quality=quality-10;

returnbyteArrayOutputStream.toByteArray();

这个方法的第一个参数不必解释,第二个参数表示你要求的压缩后图片最大可以是多少。

最后可以拿到一个byte数组。

我们有了这个byte数组就可以转化为file或者bitmap。

注意这种质量压缩后,像素本身没有改变。

对于像素压缩,顾名思义就是压缩像素。

这里用到的一个主要的方法就是:

publicstaticBitmapdecodeFile(StringpathName,Optionsopts){

Bitmapbm=null;

InputStreamstream=null;

try{

stream=newFileInputStream(pathName);

bm=decodeStream(stream,null,opts);

}catch(Exceptione){

/*donothing.

Iftheexceptionhappenedonopen,bmwillbenull.

*/

Log.e("

BitmapFactory"

"

Unabletodecodestream:

"

+e);

}finally{

if(stream!

=null){

stream.close();

}catch(IOExceptione){

//donothinghere

returnbm;

这是BitmapFactory中的一个静态方法,第一个参数表示file的全路径,第二个参数是关键,Options是BitmapFactory类中的一个静态内部类,它有两个非常重要的属性:

/**

*Ifsettotrue,thedecoderwillreturnnull(nobitmap),but

*theout...fieldswillstillbeset,allowingthecallertoquery

*thebitmapwithouthavingtoallocatethememoryforitspixels.

publicbooleaninJustDecodeBounds;

*Ifsettoavalue>

1,requeststhedecodertosubsampletheoriginal

*image,returningasmallerimagetosavememory.Thesamplesizeis

*thenumberofpixelsineitherdimensionthatcorrespondtoasingle

*pixelinthedecodedbitmap.Forexample,inSampleSize==4returns

*animagethatis1/4thewidth/heightoftheoriginal,and1/16the

*numberofpixels.Anyvalue<

=1istreatedthesameas1.Note:

the

*decoderusesafinalvaluebasedonpowersof2,anyothervaluewill

*beroundeddowntothenearestpowerof2.

publicintinSampleSize;

第一个属性inJustDecodeBounds,如果设置为ture,则返回null。

第二个属性inSampleSize表示缩放比例,大于1表示缩小了原来的多少,比如inSampleSize==4,就表示缩小了原来的四分之一,如果小于1则和1相同。

好了来看看这个网上遍地都是的一个像素压缩的方法:

privateBitmapgetimage(StringsrcPath){

BitmapFactory.OptionsnewOpts=newBitmapFactory.Options();

//开始读入图片,此时把options.inJustDecodeBounds设回true了

newOpts.inJustDecodeBounds=true;

Bitmapbitmap=BitmapFactory.decodeFile(srcPath,newOpts);

//此时返回bm为空

newOpts.inJustDecodeBounds=false;

intw=newOpts.outWidth;

inth=newOpts.outHeight;

//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为

floathh=800f;

//这里设置高度为800f

floatww=480f;

//这里设置宽度为480f

//缩放比。

由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可

intbe=1;

//be=1表示不缩放

if(w>

h&

&

w>

ww){//如果宽度大的话根据宽度固定大小缩放

be=(int)(newOpts.outWidth/ww);

}elseif(w<

h>

hh){//如果高度高的话根据宽度固定大小缩放

be=(int)(newOpts.outHeight/hh);

if(be<

=0)

be=1;

newOpts.inSampleSize=be;

//设置缩放比例

//重新读入图片,注意此时已经把options.inJustDecodeBounds设回false了

bitmap=BitmapFactory.decodeFile(srcPath,newOpts);

returnbitmap;

这样就完成了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1