拍照+相册+截取图片

一、拍照+截取

拍照:

 mStorageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);//获取存储器的专门放图片的区域
 uri = Uri.fromFile(new File(mStorageDir.getPath()+System.currentTimeMillis()+".png")); //在该区域创建文件,并转换为uri格式
 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //将图片处理的数据传递到uri上
                intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
                //在Dialog中,必须这样使用,才能回调到Activity上
                ((Activity)mContext).startActivityForResult(intent,REQUST_PHOTO);

拍照

拍照完之后回调

Activity.onActivityResult()

if(requestCode == ImageDialog.REQUST_PHOTO){
     //截取图片   第一个参数就是刚才的uri
   cropImageUri(ImageDialog.uri,800,600,REQUST_CRAP);
} 

 private void cropImageUri(Uri uri, int outputX, int outputY, int requestCode){
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 2);
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", outputX);
        intent.putExtra("outputY", outputY);
        intent.putExtra("scale", true);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        intent.putExtra("return-data", false);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
        intent.putExtra("noFaceDetection", true); // no face detection
        //发现截取完图片,还需要再次回调
        startActivityForResult(intent, requestCode);
    }

在从onActivityResult()中保存图片,到地址

else if (requestCode == REQUST_CRAP){
     Bitmap bitmap = decodeUriAsBitmap(data.getData());
     imageView.setImageBitmap(bitmap);
    }

private Bitmap decodeUriAsBitmap(Uri uri){
        Bitmap photo = null;
        Uri photoUri = uri;
        if (photoUri != null) {
            //根据uri地址获取Bitmap
            photo = BitmapFactory.decodeFile(photoUri.getPath());
        }
        Log.d(TAG,photoUri.getPath());
        if (photo == null) {
            //将图片生成jpeg
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        }
        return photo;
    }

二、从相册中选择+截取

   Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
              //表明选择的是image类型
                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, uri);

                intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

                intent.putExtra("noFaceDetection", true); // no face detection

                ((Activity)mContext).startActivityForResult(intent, REQUEST_GALLERY);        

之后的步骤跟上面相同

时间: 2024-10-04 01:44:27

拍照+相册+截取图片的相关文章

android 调用系统相机获取图片、调用系统相册获取图片,并对图片进行截取

打开系统相册获取图片并截取,代码相对简单 1 Intent intent = new Intent(Intent.ACTION_GET_CONTENT,null); 2 intent.setType("image/*"); 3 intent.putExtra("crop", "true"); 4 5 //WIDTH 和 HEIGHT指的是截取框的宽高比例,如设WIDTH = 1,HEIGHT = 1,截取框就为正方形 6 intent.putEx

拍照/从相册读取图片后进行裁剪的方法

本范例实现的是用户可以通过拍照.相册获取图片,然后进行裁剪,最后将结果保存在IamgeView中.当然你可以选择将结果同时存放在sd卡中,作为以后的缓存. 思路: 1.通过拍照获取图片 进入系统自带的相机界面——>拍照——>保存在sd卡中——>读取sd卡的文件进行裁减.PS:裁剪前先判断是否获取到图片了 2.通过系统相册获取图片 进入系统相册——>找到图片——>进行裁减.PS:裁剪前线判断是否获取到系统的图片了 接下来贴上实现方法: 1.进入拍照界面或者相册的方法,获取信息后

Android拍照,相册选择图片以及Android6.0权限管理

概述 在android开发过程中,拍照或者从相册中选择图片是很常见的功能.下面要说得这个案例比较简单,用户点击按钮选择拍照或者打开相册选择图片,然后将选中的图片显示在手机上.android6.0后,推出了动态权限管理.以往我们将涉及到的权限全部写在清单文件中,只要用户安装了该程序,程序在运行过程中都会获得相应权限.android6.0后,对于一些特别敏感的权限,开发者必须在程序中进行声明.拍照和从相册选择图片都是涉及到用户隐私的敏感权限,必须在程序中进行声明. 大概的流程 创建布局文件,这里不多

从相册获取图片及调用相机拍照获取图片,最后上传图片到服务器

调用相机拍照获取图片: 跳转到到拍照界面: Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //下面这句指定调用相机拍照后的照片存储的路径 mSzImageFileName = Long.toString(System.currentTimeMillis()) + ".png"; takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new F

Android上传图片之调用系统拍照和从相册选择图片

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

Android 拍照或者从相册获取图片的实现

我们常常会用到上传头像,或者发帖子的时候选择本地图片上传的功能.这个很常见 今天因为app的需求我研究了下.现在分享下. 其实不论是通过拍照还是从相册选取都会用到Intent 这是系统提供给我们用来调用系统方法的好用工具! 首先,需要设计下我们想怎么调用系统的拍照或者选取图片的方法 我们可以点击头像或者一个按钮然后弹出一个对话框,让用户自己 选择是拍照还是选择图片(如下图) . 那这个对话框怎么写呢.通过AlertDialog来实现(我们就给这个方法起名叫dialog): //对头像操作 pri

封装了一个类,让你用三行代码就能获得相册或拍照得到的图片

一.最终成果 本例是用android自带的相册获取图片的,并且处理了很多异常,最终你的activity只需要用很少的代码就能获得用户选择好的图片了. 例子: public class GetSimplePhotoHelperActivity extends KaleBaseActivity { GetSimplePhotoHelper mPhotoHelper; @Override protected void onCreate(Bundle savedInstanceState) { supe

HTML5 Plus 拍照或者相册选择图片上传

利用HTML Plus的Camera.GalleryIO.Storage和Uploader来实现手机APP拍照或者从相册选择图片上传.Camera模块管理设备的摄像头,可用于拍照.摄像操作,通过plus.camera获取摄像头管理对象.Gallery模块管理系统相册,支持从相册中选择图片或视频文件.保存图片或视频文件到相册等功能.通过plus.gallery获取相册管理对象.IO模块管理本地文件系统,用于对文件系统的目录浏览.文件的读取.文件的写入等操作.通过plus.io可获取文件系统管理对象

Android拍照、相册 获取图片后,裁剪图片

最近在做的B2B的项目,图片大部分来源于用户自己上传: 由于android尺寸的不一,用户相机,相册的图片也是奇形怪状: 所以在上传之前对图片做一次裁剪是很有必要的! 下面是按比例裁剪图片的demo 资源文件activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/