上传大图的压缩--质量压缩
来源:互联网 发布:公用网络改为家庭网络 编辑:程序博客网 时间:2024/04/29 17:08
图片压缩分为质量压缩和尺寸压缩,前者更改图片分辨率,不改变图片尺寸,后者着重于更改图尺寸(宽高)
尺寸压缩:通过计算BitmapFactory.Options 的 inSampleSize 得到较大大小的压缩图片bitmap,这种很容易造成oom,压缩后也有1-2M
质量压缩:根据设置压缩质量可将5M图片压缩到100KB下,尺寸不会改变
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 60, bStream);//60:图片压缩质量,100为不压缩,将压缩数据放到流中
通过尺寸压缩得到bitmap,.compress方法写入ByteArrayOutputStream中,.toByteArray()得到字节数组,写入文件
下面例子是通过将压缩后得到的流数据写入缓存文件,上传的文件
<span style="font-size:18px;">package com.bdyl.utils;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.BitmapFactory;import android.os.Environment;import android.util.Log;import android.view.Display;import com.bdyl.constance.Logs;import com.loopj.android.http.Base64;public class BitmapUtils {//计算压缩比例private static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight) {// 源图片的宽度int width = options.outWidth;int height = options.outHeight;int inSampleSize = 3;if (width > reqWidth && height > reqHeight) {// 计算出实际宽度和目标宽度的比率int widthRatio = Math.round((float) width / (float) reqWidth);int heightRatio = Math.round((float) height / (float) reqHeight);inSampleSize = Math.max(widthRatio, heightRatio);}return inSampleSize;}/* * compress pic by bitmap.compress();and save to cacheFile </span>
<span style="font-size:18px;"><span style="white-space:pre"></span> * pathName 选中图片的全路径 * return cacheFile path */public static File compressToFile(Activity context, String pathName) {BitmapFactory.Options opts = new BitmapFactory.Options();opts.inJustDecodeBounds = true;//设置为true,调用decode不会被解析,直接得到他的原始尺寸BitmapFactory.decodeFile(pathName, opts);// 调用上面定义的方法计算inSampleSize值Display display = context.getWindowManager().getDefaultDisplay();opts.inSampleSize = calculateInSampleSize(opts, display.getHeight(),display.getWidth());// 使用获取到的inSampleSize值再次解析图片opts.inJustDecodeBounds = false;//记得设置为falseBitmap bitmap = BitmapFactory.decodeFile(pathName, opts);ByteArrayOutputStream bStream = new ByteArrayOutputStream();bitmap.compress(CompressFormat.PNG, 60, bStream);// 60:压缩质量100 代表不压缩int option = 50;while (bStream.toByteArray().length / 1024 > 100) {//压缩后图片大小大于100kb,降低压缩质量,重新压缩bStream.reset();//清空流数据option -= 10;bitmap.compress(Bitmap.CompressFormat.JPEG, option, bStream);// 这里压缩options%,把压缩后的数据存放到baos中}File file = new File(context.getCacheDir(),new File(pathName).getName());FileOutputStream fos = null;try {fos = new FileOutputStream(file);fos.write(bStream.toByteArray());} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fos.close();} catch (IOException e) {e.printStackTrace();}try {bStream.close();} catch (IOException e) {e.printStackTrace();}}return file;//返回文件}}</span>
0 0
- 上传大图的压缩--质量压缩
- Bitmap 的质量压缩
- 大图片的压缩处理
- imageView加载大图,bitmap压缩图片质量RGB_565
- html5上传前压缩图片尺寸、质量
- 微擎上传图片压缩质量
- 移动端上传图片 支持图片预览、压缩、大图分片压缩、压缩后上传 解决了IOS竖屏拍照旋转90度的问题
- js 压缩大图片
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- 记录sql on and on where
- codeforces 19D 线段树+set
- COM接口指针
- Display和Visibility
- 用css3选择器给你要的第几个元素添加不同样式方法
- 上传大图的压缩--质量压缩
- 产品经理学习笔记1
- 数据结构:JavaScript实现各种排序
- ASP.NET MVC 网站开发流程
- link错误 qt undefined reference to
- 如何快速拥有一个小网站
- C++中的异常操作:throw&try&catch
- 度娘的由来
- UNION 和UNION ALL 的区别(合并表和视图)