首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
移动开发
> 详细
android bitmap compress
时间:
2016-02-09 01:23:43
阅读:
385
评论:
0
收藏:
0
[点我收藏+]
标签:
android的照相功能随着手机硬件的发展,变得越来越强大,能够找出很高分辨率的图片。
有些场景中,需要照相并且上传到服务,但是由于图片的大小太大,那么就上传就会很慢(在有些网络情况下),而且很耗流量,要想速度快,那么就需要减小图片的大小。减少图片的大小有两种方法,1. 照小图片; 2. 压缩大图片。 照相时获取小图片一般不太符合要求,因为,图片的清晰度会很差,但是这种情况有个好处就是应用速度会快些; 压缩图片,就是把大图片压缩小,降低图片的质量,在一定范围内,降低图片的大小,并且满足需求(图片仍就清晰)。下面组要是介绍图片的压缩:
1. 照相请查看
http://blog.csdn.net/luhuajcdd/article/details/8826587
->
想要保存图片到制定目录,启动Camera应用时,需要指定文件
2. 压缩过程:
2.1 从图片路径中读取图片(图片很大,不能全部加在到内存中处理,要是全部加载到内存中会内存溢出)
[java]
view plain
final BitmapFactory.Options options =
new BitmapFactory.Options();
options.inJustDecodeBounds =
true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options,
480,
800);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds =
false;
Bitmap bm = BitmapFactory.decodeFile(filePath, options);
2.2 处理图片旋转
[java]
view plain
int degree = readPictureDegree(filePath);
bm = rotateBitmap(bm,degree) ;
[java]
view plain
private
static
int readPictureDegree(String path) {
int degree =
0;
try {
ExifInterface exifInterface =
new ExifInterface(path);
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree =
90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree =
180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree =
270;
break;
}
}
catch (IOException e) {
e.printStackTrace();
}
return degree;
}
[java]
view plain
private
static Bitmap rotateBitmap(Bitmap bitmap,
int rotate){
if(bitmap ==
null)
return
null ;
int w = bitmap.getWidth();
int h = bitmap.getHeight();
// Setting post rotate to 90
Matrix mtx =
new Matrix();
mtx.postRotate(rotate);
return Bitmap.createBitmap(bitmap,
0,
0, w, h, mtx,
true);
}
2.3压缩图片
[java]
view plain
bm.compress(Bitmap.CompressFormat.JPEG,
30, baos);
//30 是压缩率,表示压缩70%; 如果不压缩是100,表示压缩率为0
完整的方法代码:
[java]
view plain
public
static Bitmap getSmallBitmap(String filePath) {
final BitmapFactory.Options options =
new BitmapFactory.Options();
options.inJustDecodeBounds =
true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options,
480,
800);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds =
false;
Bitmap bm = BitmapFactory.decodeFile(filePath, options);
if(bm ==
null){
return
null;
}
int degree = readPictureDegree(filePath);
bm = rotateBitmap(bm,degree) ;
ByteArrayOutputStream baos =
null ;
try{
baos =
new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG,
30, baos);
}
finally{
try {
if(baos !=
null)
baos.close() ;
}
catch (IOException e) {
e.printStackTrace();
}
}
return bm ;
}
[java]
view plain
private
static
int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth,
int reqHeight) {
// Raw height and width of image
final
int height = options.outHeight;
final
int width = options.outWidth;
int inSampleSize =
1;
if (height > reqHeight || width > reqWidth) {
// Calculate ratios of height and width to requested height and
// width
final
int heightRatio = Math.round((
float) height
/ (
float) reqHeight);
final
int widthRatio = Math.round((
float) width / (
float) reqWidth);
// Choose the smallest ratio as inSampleSize value, this will
// guarantee
// a final image with both dimensions larger than or equal to the
// requested height and width.
inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio;
}
return inSampleSize;
}
android bitmap compress
标签:
原文地址:http://www.cnblogs.com/to-creat/p/5185362.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
关闭苹果IOS app自动更新
2021-07-29
开发一个即时通讯App
2021-07-28
iOS 跳转App Store进行评分
2021-07-26
诺基亚短信生成!太好玩了
2021-07-26
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
2021-07-26
Android系统编程入门系列之界面Activity响应丝滑的传统动画
2021-07-26
uniapp h5,app两端复制文本
2021-07-22
uni-app滚动视图容器(scroll-view)之监听上拉事件
2021-07-21
新型横向移动工具原理分析、代码分析、优缺点以及检测方案
2021-07-19
Android系统编程入门系列之界面Activity交互响应
2021-07-19
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!