Android大图片裁剪终极解决方案
根据我们的分析与总结,图片的来源有拍照和相册,而可采取的操作有
- 使用Bitmap并返回数据
- 使用Uri不返回数据
前面我们了解到,使用Bitmap有可能会导致图片过大,而不能返回实际大小的图片,我将采用大图Uri,小图Bitmap的数据存储方式。
我们将要使用到URI来保存拍照后的图片:
1
2
|
private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg" ;//temp file
Uri imageUri = Uri.parse(IMAGE_FILE_LOCATION); //The Uri to store the big bitmap
|
不难知道,我们从相册选取图片的Action为Intent.ACTION_GET_CONTENT。
根据我们上一篇博客的分析,我准备好了两个实例的Intent。
一、从相册截大图:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null );
intent.setType( "image/*" );
intent.putExtra( "crop" , "true" );
intent.putExtra( "aspectX" , 2 );
intent.putExtra( "aspectY" , 1 );
intent.putExtra( "outputX" , 600 );
intent.putExtra( "outputY" , 300 );
intent.putExtra( "scale" , true );
intent.putExtra( "return-data" , false );
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra( "outputFormat" , Bitmap.CompressFormat.JPEG.toString());
intent.putExtra( "noFaceDetection" , true ); // no face detection
startActivityForResult(intent, CHOOSE_BIG_PICTURE);
|
二、从相册截小图
1
2
3
4
5
6
7
8
9
10
11
12
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null );
intent.setType( "image/*" );
intent.putExtra( "crop" , "true" );
intent.putExtra( "aspectX" , 2 );
intent.putExtra( "aspectY" , 1 );
intent.putExtra( "outputX" , 200 );
intent.putExtra( "outputY" , 100 );
intent.putExtra( "scale" , true );
intent.putExtra( "return-data" , true );
intent.putExtra( "outputFormat" , Bitmap.CompressFormat.JPEG.toString());
intent.putExtra( "noFaceDetection" , true ); // no face detection
startActivityForResult(intent, CHOOSE_SMALL_PICTURE);
|
三、对应的onActivityResult可以这样处理返回的数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
switch (requestCode) {
case CHOOSE_BIG_PICTURE:
Log.d(TAG, "CHOOSE_BIG_PICTURE: data = " + data); //it seems to be null
if (imageUri != null ){
Bitmap bitmap = decodeUriAsBitmap(imageUri); //decode bitmap
imageView.setImageBitmap(bitmap);
}
break ;
case CHOOSE_SMALL_PICTURE:
if (data != null ){
Bitmap bitmap = data.getParcelableExtra( "data" );
imageView.setImageBitmap(bitmap);
} else {
Log.e(TAG, "CHOOSE_SMALL_PICTURE: data = " + data);
}
break ;
default :
break ;
}
|
1
2
3
4
5
6
7
8
9
10
|
private Bitmap decodeUriAsBitmap(Uri uri){
Bitmap bitmap = null ;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null ;
}
return bitmap;
}
|
效果图:
大图 | 小图 |
转载(http://my.oschina.net/ryanhoo/blog/86853)
转载于:https://www.cnblogs.com/cimu/p/4319823.html
Android大图片裁剪终极解决方案相关推荐
- Android大图片裁剪终极解决方案 原理分析
约几个月前,我正为公司的APP在Android手机上实现拍照截图而烦恼不已. 上网搜索,确实有不少的例子,大多都是抄来抄去,而且水平多半处于demo的样子,可以用来讲解知识点,但是一碰到实际项目,就漏 ...
- linux图片切割,从相册截图 - Android大图片裁剪终极解决方案_Linux编程_Linux公社-Linux系统门户网站...
在这篇文章中,我将向大家展示如何从相册截图. 上一篇文章中,我就拍照截图这一需求进行了详细的分析,试图让大家了解Android本身的限制,以及我们应当采取的实现方案. 根据我们的分析与总结,图片的来源 ...
- Android大图片裁剪解决方案
2019独角兽企业重金招聘Python工程师标准>>> 截图原理 在Android中,Intent触发Camera程序,拍好照片后,将会返回数据,但是考虑到内存问题,Camera不会 ...
- Android大图片裁剪之手机拍照和从相册中选择注意点
Intent("com.android.camera.action.CROP"):中data.MediaStore.EXTRA_OUTPUT以及return-data data:P ...
- android 获取视频缩略图终极解决方案(ffmpeg)
android 获取视频缩略图终极解决方案(ffmpeg) 参考文章: (1)android 获取视频缩略图终极解决方案(ffmpeg) (2)https://www.cnblogs.com/juka ...
- Android大图片背景性能优化篇
内存优化-Android大图片 最近在做一个游戏项目,项目中使用大量的1080P作为背景图片,整个APP内存很快就超过峰值,导致项目中出现多处内存溢出.掉帧现象. Meizu Mx4pro(260M左 ...
- android图片压缩终极解决方案
如题,多种压缩方式常用的有尺寸压缩.质量压缩以及通过JNI调用libjpeg库来进行压缩,三种方式结合使用实现指定图片内存大小,清晰度达到最优,下面就先分别介绍下这几种压缩方式. 原文出处:http: ...
- Android大图片处理
移动设备对内存的要求还是很苛刻的,即便现在主流旗舰机动辄3G.4G的内存,但是对应于每个App分得的容量来说还是有限的,我们程序猿可以用各种手段来增大单个App的需求量,但是并不是完美的解决方案.最好 ...
- 关于大图片裁剪在华为等手机上无法使用问题
项目中我们在进行图片上传时,往往不是选择好图片直接上传就好,而是需要进行一些操作,比如裁剪.通常我的的裁剪是这样的. public void startPhotoZoom(Uri uri, int w ...
最新文章
- 沈向、洋周明:神经自然语言处理进展综述:建模,学习,推理
- css selector list
- 【转】深入了解CPU两大架构ARM与X86
- HDU Problem - 5113 Black And White(搜索剪枝)
- [归并][随机算法] JZOJ P3765 想法
- SSO的通用标准OpenID Connect
- HDU1755 A Number Puzzle【全排列+暴力】
- SpringMVC----视图层框架
- 使用Carbide进行调试时免除重新启动模拟器的一种方法(转)
- 因式分解题目及过程_两道新定义题目的对比分析
- Python数据分析第四课:数据的处理(数据合并、数据筛选、数据排序)
- 算法题目打卡:Ques20201007
- 2004年下半年 网络工程师 上下午试卷【附带答案】
- GPU Skinning旋转指定骨骼
- PBOC规范研究之七 ----应用选择(转)
- 【转】Actionscript,AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系
- Smart Client Software Factory安装
- Teamface可定制化的CRM管理软件,颠覆传统的管理软件
- 安卓手机安装运行青龙面板
- 企业数字化转型的核心是什么?如何才能真正做到数字化转型?