导航:首页 > 文件处理 > androidjpg压缩

androidjpg压缩

发布时间:2022-04-19 14:03:03

android上有没有好的图片压缩算法或工具包

Android 本身就提供了 图片压缩的 api 包括 按质量压缩 按照比例压缩
private Bitmap compressImage(Bitmap image) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 100;
while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
options -= 10;//每次都减少10
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
return bitmap;
}

⑵ 请问大家有谁知道可以压缩图片(使图片占用内存变小)的安卓版免费的软件

网络流通的99.9%的图片都是高度压缩的png,jpg等格式,再次使用压缩软件压缩这类图片没有意义,缩小体积比率极小。安卓平台的压缩软件,很多主流手机品牌自带的文件管理器是集成了压缩解压功能的。将你打算压缩的一堆文件放进一个文件夹,选定这个文件夹,详情里就有压缩选项,如下图,如果手机品牌小众,没有自带的压缩解压工具,可以考虑PC平台知名软件的安卓版,比如rar for 安卓:

⑶ android 图片质量压缩和尺寸压缩有什么区别

这个方法用来将特定格式的压缩图片写入输出流(OutputStream)中,当然例如输出流与文件联系在一起,压缩后的图片也就是一个文件。如果压缩成功则返回true,其中有三个参数:

format是压缩后的图片的格式,可取值:Bitmap.CompressFormat .JPEG、~.PNG、~.WEBP。

quality的取值范围为[0,100],值越小,经过压缩后图片失真越严重,当然图片文件也会越小。(PNG格式的图片会忽略这个值的设定)

stream指定压缩的图片输出的地方,比如某文件。

上述方法还有一个值得注意的地方是:当用BitmapFactory decode文件时可能返回一个跟原图片不同位深的图片,或者丢失了每个像素的透明值(alpha),比如说,JPEG格式的图片仅仅支持不透明的像素。文章android图片压缩在文末提到的下面这点可能就是这个原因:

当调用bitmap.compress(CompressFormat.JPEG, 100, fos);保存为图片时发现图片背景为黑色,如下图:

下面是质量压缩的代码:

(Bitmapbmp,Filefile){

ByteArrayOutputStreambaos=newByteArrayOutputStream();

intoptions=80;//个人喜欢从80开始,

bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);

while(baos.toByteArray().length/1024>100){

baos.reset();

options-=10;

bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);

}

try{

FileOutputStreamfos=newFileOutputStream(file);

fos.write(baos.toByteArray());

fos.flush();

fos.close();

}catch(Exceptione){

e.printStackTrace();

}

}

这段代码来自Android图片压缩总结,我根据自己的需求改了改,但是大同小异,所以就直接贴了。

随着代码中的option逐渐变小,我们可以在logcat中打印baos的大小来查看图片的大小。我们也可以去掉while的循环条件,一直压缩下去看效果,最终一张照片可能就由原来的3、4M变成了几百K甚至几百B了。我在试的过程中将option设置成100,压缩后偶尔会出现一张3、4M的图片经过压缩后竟变成了6、7M,这里还是有点困惑,不知道为什么。

随后,我想把这个压缩后的图片(1、200KB)填充到ImageView中时却失败了,logcat中提示图片过大!这就是文章开头提到的问题,虽然我们通过质量压缩使File形式的图片文件缩小了,但是并没有改变图片的宽高,原先是1080*1920分辨率的图片经压缩后还是1080*1920,而File格式转换成Bitmap格式进入到内存中时,内存是根据图片的像素数量来给图片分配内存大小的,还是有好几M,因此填充ImageView失败。

顺便提一下,可以用bitmap.getByteCount()获取存储bitmap像素的内存大小,但是KITKAT(Android 4.4版本)以后用getAllocateByteCount()获取。一般情况下,后者返回值比前者大,比如,当bitmap被重用去decode另外更小的bitmaps时,或者被人为地配置一下属性值,比如setWidth()、setHeight()、reconfigure()时,如果bitmap不做以上操作,二者的返回值应该是一样的。(译文,不太懂)

二、尺寸压缩

特点: 通过设置采样率, 减少图片的像素, 达到对内存中的Bitmap进行压缩



我们主要通过BitmapFactory中的decodeFile方法对图片进行尺寸压缩:

publicstaticBitmapdecodeFile(StringpathName,BitmapFactory.Optionsopts)

public static Bitmap decodeFile (String pathName, BitmapFactory.Options opts)

其中有两个参数:

pathName是图片文件的路径。

opts 就是所谓的采样率,它里边有很多属性可以设置,我们通过设置属性来达到根据自己的需要,压缩出指定的图片。其中比较常用的属性有:

booleaninJustDecodeBounds—— 如果设置为true,则只读取bitmap的宽高,而忽略内容。

intinSampleSize—— 如果>1,调用decodeFile方法后,就会得到一个更小的bitmap对象(已压缩)。比如设置为2,那么新Bitmap的宽高都会是原Bitmap宽高的1/2,总体大小自然就是原来的1/4了,以此类推。

booleaninPurgeable—— 如果设置为true,压缩后的图片像素占的内存将会在系统清理内存的时候被回收掉,当像素的信息再次被用到时将会自动重新decode该像素(比如getPixels()时)。(慎用!重复decode可以会造成UI的卡顿,API level 21 已弃用)

booleaninInputShareable—— 与inPurgeable配合使用,如果inPurgeable设置成false,自动忽略此值,如果inPurgeable为true,此值决定是否该bitmap能分享引用给输入数据(inputstream,array等),或者必须进行深拷贝。API level 21 已弃用。(这是译文,不太理解!!!)

下面是一段实现的代码

privateBitmapsizeCompres(Stringpath,intrqsW,intrqsH){

//用option设置返回的bitmap对象的一些属性参数

finalBitmapFactory.Optionsoptions=newBitmapFactory.Options();

options.inJustDecodeBounds=true;//设置仅读取Bitmap的宽高而不读取内容

BitmapFactory.decodeFile(path,options);//获取到图片的宽高,放在option里边

finalintheight=options.outHeight;//图片的高度放在option里的outHeight属性中

finalintwidth=options.outWidth;

intinSampleSize=1;

if(rqsW==0||rqsH==0){

options.inSampleSize=1;

}elseif(height>rqsH||width>rqsW){

finalintheightRatio=Math.round((float)height/(float)rqsH);

finalintwidthRatio=Math.round((float)width/(float)rqsW);

inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio;

options.inSampleSize=inSampleSize;

}

returnBitmapFactory.decodeFile(path,options);//主要通过option里的inSampleSize对原图片进行按比例压缩

}

private Bitmap sizeCompres(String path, int rqsW, int rqsH) {

// 用option设置返回的bitmap对象的一些属性参数

final BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;// 设置仅读取Bitmap的宽高而不读取内容

BitmapFactory.decodeFile(path, options);// 获取到图片的宽高,放在option里边

final int height = options.outHeight;//图片的高度放在option里的outHeight属性中

final int width = options.outWidth;

int inSampleSize = 1;

if (rqsW == 0 || rqsH == 0) {

options.inSampleSize = 1;

} else if (height > rqsH || width > rqsW) {

final int heightRatio = Math.round((float) height / (float) rqsH);

final int widthRatio = Math.round((float) width / (float) rqsW);

inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;

options.inSampleSize = inSampleSize;

}

return BitmapFactory.decodeFile(path, options);// 主要通过option里的inSampleSize对原图片进行按比例压缩

}

上面就是简单的质量压缩与尺寸压缩。

⑷ android中压缩图片的几种方法比较

图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能实现对 file的影响,你可以把一个file转成bitmap再转成file,或者直接将一个bitmap转成file时,这个最终的file是被压缩过的,但 是中间的bitmap并没有被压缩(或者说几乎没有被压缩,我不确定),因为bigmap在内存中的大小是按像素计算的,也就是width * height,对于质量压缩,并不会改变图片的像素,所以就算质量被压缩了,但是bitmap在内存的占有率还是没变小,但你做成file时,它确实变小 了;
而尺寸压缩由于是减小了图片的像素,所以它直接对bitmap产生了影响,当然最终的file也是相对的变小了;

⑸ 如何压缩位图JPEG质量损失最小的Android

我加载它作为一个位图从文件:
BitmapFactory.Options选项=新BitmapFactory.Options();
//明确说明一切,所以配置很清楚
options.in preferredConfig = Config.ARGB_8888;
options.inDither = FALSE; //不应该反正使用,因为8888可存储HQ像素

⑹ 在安卓中如何把图片压缩成64kb一下

快图浏览,浏览图片时候点击屏幕右上角,再点击剪裁,这时再保存,保存后的图片至少比原图缩小了十倍多。
或者你安装个截图软件,设置好后。后台运行。再打开图片,截图即可缩小图片文件大小。

这是比较简便的压缩图片方法了。

有问题请追问

如满意,请选择我回答下方的满意答案按钮!

来自糯米手机团

PS:
如其他知友需要帮助,请把鼠标放我ID上,等弹出窗口,点 求助知友

写明具体要求并点击左下角的“设置分类”,点“电子数码”下的“手机使用”等

⑺ Android中压缩图片指定大小

注意看这句话,bit.compress(CompressFormat.PNG, 100, baos);
那里的数字表示 如果不压缩是100,表示压缩率为0。
如果是70,就表示压缩率是70,表示压缩30%;
所以你的倒数第二句话表示没有压缩。

以下是我压缩的方法,望采纳。

/**
* 图像压缩并保存到本地
* 返回处理过的图片
*
*/
private Bitmap
saveImage(String fileName,Bitmap bit) {

File file = new
File(fileName);
if (!file.exists()) {
try
{
file.createNewFile();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bit.compress(CompressFormat.JPEG, 70,
stream);
// 70 是压缩率,表示压缩30%; 如果不压缩是100,表示压缩率为0
FileOutputStream os =
new
FileOutputStream(file);
os.write(stream.toByteArray());
os.close();
return
bit;
} catch (Exception e) {
file = null;
return
null;
}
}

⑻ 怎样在安卓系统上压缩图片大小

安卓系统是手机系统,我们很少在手机上进行压缩,有的手机是有压缩功能的,想小米,oppo类的手机上有这种功能,压缩效果并不乐观,电脑上执行压缩小编例举了一下步骤:

a、打开任意浏览器,点击浏览器的搜索框,在这里搜索图片压缩,选择网页搜索,我们要找到下载工具的网页,将工具下载安装到我们的电脑。

其实图片文件压缩是一个简单的过程,但是我们要找对图片文件压缩的软件,进行图片压缩就是一件简单的事情

⑼ 怎样用手机把图片压缩成文件

再文件管理中新建一个文件夹,把图片复制到文件夹中,然后点击压缩即可。

1、打开文件管理,点击图片。


注意事项:

手机压缩包跟电脑压缩包一样的,点击进入压缩包,就可以看到刚刚进行压缩的图片了。

阅读全文

与androidjpg压缩相关的资料

热点内容
柯洁在哪个app下围棋 浏览:751
平板用什么app看内在美 浏览:609
cad计算机命令 浏览:173
邮箱设置域名服务器错误什么意思 浏览:671
硬盘解压失败受损蓝屏 浏览:654
应用和服务器是什么意思 浏览:485
程序员需要知道的网站 浏览:713
微信支付页面加密码怎么加 浏览:57
网络加密狗问题 浏览:698
cnc曲面编程实例 浏览:170
什么app零粉分发视频有收益 浏览:164
肯尼亚程序员 浏览:640
新科源码 浏览:661
如何判断服务器有没有带宽 浏览:44
天正建筑批量删除命令 浏览:96
cad最下面的一排命令都什么意思 浏览:456
pythonimportcpp 浏览:852
W10的系统怎么给U盘加密 浏览:372
华为手机代码编程教学入门 浏览:764
和彩云没会员怎样解压 浏览:636