使用Android系统调用裁剪图片并保存
来源:互联网 发布:浙江网络作家协会 编辑:程序博客网 时间:2024/05/14 01:57
顺序:打开图片--->获取图片Uri或者Bitmap--->打开系统裁剪框--->获得裁剪后的图片的Uri或者Bitmap。
1.单纯打开图库选择图片
Intent intent = new Intent();intent.setAction(Intent.ACTION_GET_CONTENT);// 打开图库获取图片intent.setAction(Intent.ACTION_PICK);// 打开图库获取图片intent.setType("image/*");// 这个参数是确定要选择的内容为图片intent.putExtra("return-data", true);// 是否要返回,如果设置false取到的值就是空值startActivityForResult(intent, REQUEST);
1.1选择图片并显示在ImageView
Uri selectImg = data.getData();ContentResolver contentResolver = this.getContentResolver();try {bm = BitmapFactory.decodeStream(contentResolver.openInputStream(selectImg));normal_img.setImageBitmap(bm);} catch (FileNotFoundException e) {e.printStackTrace();}
1.2拍照图片
File cameraFile = new File(Environment.getExternalStorageDirectory().getPath(),"abc.jpg");if (cameraFile.exists()) {cameraFile.delete();}Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile));startActivityForResult(intent2, TAKE_PICTURE);
2.选择图库里的图片进行裁剪
Intent antent = new Intent(Intent.ACTION_PICK, null);antent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");//限制图片类型,可写"image/jpg"或"image/png"
//MediaStore.Images.Media.EXTERNAL_CONTENT_URI意思是返回的数据类型是图片对应的Uri,不是将Bitmap直接返回。如果直接返回Bitmap,如果Bitmap太大,系统会强行压缩造成图片的失真,所以不管图片大小,最好返回数据都用Uri
startActivityForResult(antent, CUT_REQUEST);
2.1调用裁剪框返回数据为Bimap
/*** 以时间戳命名将bitmap写入文件* * @param bitmap*/public static void writeFileByBitmap2(Bitmap bitmap) {String path = Environment.getExternalStorageDirectory().getAbsolutePath();//手机设置的存储位置File file = new File(path);File imageFile = new File(file, System.currentTimeMillis() + ".png");if (!file.exists()) {file.mkdirs();}try {imageFile.createNewFile();FileOutputStream outputStream = new FileOutputStream(imageFile);bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);outputStream.flush();outputStream.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
2.1调用裁剪框返回数据为Uri
/*** 以时间戳命名将bitmap写入文件* * @param bitmap*/public static void writeFileByBitmap2(Bitmap bitmap) {String path = Environment.getExternalStorageDirectory().getAbsolutePath();//手机设置的存储位置File file = new File(path);File imageFile = new File(file, System.currentTimeMillis() + ".png");if (!file.exists()) {file.mkdirs();}try {imageFile.createNewFile();FileOutputStream outputStream = new FileOutputStream(imageFile);bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);outputStream.flush();outputStream.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
3保存图片
/*** 以时间戳命名将bitmap写入文件* * @param bitmap*/public static void writeFileByBitmap2(Bitmap bitmap) {String path = Environment.getExternalStorageDirectory().getAbsolutePath();//手机设置的存储位置File file = new File(path);File imageFile = new File(file, System.currentTimeMillis() + ".png");if (!file.exists()) {file.mkdirs();}try {imageFile.createNewFile();FileOutputStream outputStream = new FileOutputStream(imageFile);bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);outputStream.flush();outputStream.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
注意:裁剪或者选择图片,最好返回数据的格式是Uri!!!
4.附上完整代码
0 0
- 使用Android系统调用裁剪图片并保存
- 调用Android系统相册并裁剪图片
- Android调用系统图库并裁剪图片
- Android调用系统图库并裁剪图片
- Android 调用系统相机、图库 ,取图片并裁剪、保存sd卡
- 调用系统相册选取照片并使用系统裁剪图片
- Android——最简单的图片裁剪 调用系统原生裁剪图片(+保存不成功)
- Android 调用系统的照相,浏览图片,转存并裁剪!
- Android 调用系统的照相,浏览图片,转存并裁剪!
- Android调用系统图库和相机获取图片并裁剪
- Android拍照压缩裁剪并保存图片
- 调用系统裁剪 并生成图片
- 调用系统裁剪 并生成图片
- Android中调用系统相机、系统相册来获取图片,并裁剪图片。
- android使用系统裁剪图片
- Android调用系统相机拍照、裁剪,并保存到手机SD卡中,展示到界面
- Android调用系统相机拍照并保存图片文件
- android调用系统相机拍照并裁剪
- 进制转换【思维】(巧法)
- 后缀数组
- HNOI2010 bounce 弹飞绵羊 (BZOJ2002)
- Java线程和多线程(四)——主线程中的异常
- RSA加密算法的简单案例
- 使用Android系统调用裁剪图片并保存
- ESP8266 GPIO中断学习
- 几个重要的java数据库访问类和接口
- chmod 777 修改权限
- [精]Oracle EBS 12.1.3 克隆教程(Rapid Cloning)
- 关于DS报错:Delimiter for field "TURNOVER_VOLUE" not found; input: {1 8 3 5 1 9 6 8 6 6}, at offset: 65的问
- 树结构练习——排序二叉树的中序遍历
- JQuery技术详解(一)
- volatile关键字