Android实现拍照截取和相册图片截取

关于拍照截取和相册截取,看了网上很多资料,自己整理了一份比较详细的,供有需要的人参考

1  拍照

原理就是通过intent调用系统的相机,拍完照在回调进行操作,成功获取到拍完照的图片根据uri调用系统的裁剪页面,裁剪完也是在回调中进行处理,显示在页面的imageview中。

2  相册选取图片

原理也是通过intent打开系统的图片,用户选择完成以后在回调中根据图片的uri调用系统的裁剪页面,同上。

首先,定义几个常量

public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
public static final int ACTION_CHOOSE=3;
private Uri imageUri; //图片路径
private String filename; //图片名称

然后在拍照和相册选择的按钮中处理事件

@Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.bt1:  //拍照截取
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date(System.currentTimeMillis());
        filename = format.format(date);
        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
        File outputImage = new File(path, filename +".jpg");
        try {
          if (outputImage.exists()) {
            outputImage.delete();
          }
          outputImage.createNewFile();
        } catch (IOException e) {
          e.printStackTrace();
        }
        //将File对象转换为Uri并启动照相程序
        imageUri = Uri.fromFile(outputImage);
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //照相
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //指定图片输出地址
        startActivityForResult(intent, TAKE_PHOTO); //启动照相
        break;
      case R.id.bt2:  //相册选取
        Intent intent2 = new Intent(Intent.ACTION_PICK);
        intent2.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
        startActivityForResult(intent2,ACTION_CHOOSE);
        break;
    }
  } 

最主要的在回调中的执行

// 使用startActivityForResult返回结果时调用的方法
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode!=RESULT_OK){
      Toast.makeText(this, "取消了", Toast.LENGTH_SHORT).show();
      return;
    }
    switch (requestCode) {
      case TAKE_PHOTO:  //拍照的回调
        cropImage();
        break;
      case ACTION_CHOOSE:  //选择照片的回调
        imageUri = data.getData();
        cropImage();
        break;
      case CROP_PHOTO:  //裁剪完照片的回调
        showPic();
        break;
      default:
        break;
    }
  } 

裁剪图片的方法

/**
 * 裁剪图片
 **/
private void cropImage() {
  Intent intent = new Intent("com.android.camera.action.CROP"); //剪裁
  intent.setDataAndType(imageUri, "image/*");
  intent.putExtra("scale", true);
  //设置宽高比例
  intent.putExtra("aspectX", 1);
  intent.putExtra("aspectY", 1);
  //设置裁剪图片宽高
  intent.putExtra("outputX", 340);
  intent.putExtra("outputY", 340);
  intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
  Toast.makeText(MainActivity.this, "剪裁图片", Toast.LENGTH_SHORT).show();
  //广播刷新相册
  Intent intentBc = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
  intentBc.setData(imageUri);
  this.sendBroadcast(intentBc);
  startActivityForResult(intent, CROP_PHOTO); //设置裁剪参数显示图片至ImageView
}

过程比较简单,可能会有一些判断的地方没有处理,如果有不对的地方希望有高手可以帮忙改进,谢谢~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android 手机截取长屏实例代码

    最近项目遇到一个需求:把当前页面保存到手机相册.想了想 我还不会呢,就百度了下大神的足迹,踏着大神的足迹,一路向前.废话不说,记录下,后期学习. public class ScreenUtils { /** * 截取scrollview的屏幕 * @param scrollView * @return */ public static Bitmap getBitmapByView(ScrollView scrollView) { int h = 0; Bitmap bitmap = null;

  • Android截取视频帧并转化为Bitmap示例

    MainActivity如下: 复制代码 代码如下: package cn.testmediametadataretriever; import java.io.File; import java.io.FileOutputStream; import android.media.MediaMetadataRetriever; import android.os.Bundle; import android.os.Environment; import android.app.Activity;

  • Android中截取当前屏幕图片的实例代码

    复制代码 代码如下: /**     * 获取和保存当前屏幕的截图     */    private void GetandSaveCurrentImage()      {          //1.构建Bitmap          WindowManager windowManager = getWindowManager();          Display display = windowManager.getDefaultDisplay();          int w = d

  • Android开发获取短信的内容并截取短信

    1.首先我们要写一个广播接收器,当我们的手机收到短信时,系统会自动发送一个广播,我们只需要接收到这条广播就可以了 2.在广播里面,我们重写的onReceive()方法,通过里面的Intent写到的Bundle就可以拿到短信的内容, 3.清单文件里面我们必须要添加权限,否则无法接收到. 4.为了防止我们的广播接收不到,我们自己写的广播接收器的权限必须要大,以防万一,我设置了1000. 下面上代码,里面的注释也比较详细.. <?xml version="." encoding=&qu

  • 解析Android截取手机屏幕两种实现方案

    最近在开发的过程中,遇到了一个需要截取屏幕保存为图片的需求,具体为截取webview的视图保存图片. 方法1:首先想到的思路是利用SDK提供的View.getDrawingCache()方法: public void printScreen(View view) { String imgPath = "/sdcard/test.png"; view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bitmap

  • Android实现bitmap指定区域滑动截取功能

    突然不知道什么心态,说要做这个,网上找了半天没找到合适的,就自己做了一个. 先上效果图: 透明区域为将要截取的区域,其他阴影部位为舍弃区域 图片资源我写死储存在了raw中,有需要可以自己写获取bitmap. 界面layout: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-au

  • Android 截取手机屏幕两种实现方法

    Android 截取手机屏幕两种实现方法 最近在开发的过程中,遇到了一个需要截取屏幕保存为图片的需求,具体为截取webview的视图保存图片. 方法1:首先想到的思路是利用SDK提供的View.getDrawingCache()方法: public void printScreen(View view) { String imgPath = "/sdcard/test.png"; view.setDrawingCacheEnabled(true); view.buildDrawingC

  • Android个人中心的头像上传,图片编码及截取实例

    首先需要有网络权限,然后我们这里匹配的网络请求是之前封装好的Okhttp. 非常的简单方便,直接复制进去,依赖一下包,然后调用方法即可. 这里是把图片转换成Base64.decode(imageString, Base64.DEFAULT); 转成Base64编码上传.具体内容也不少,需要完全整明白,还是要花点时间慢慢看的. 先看看简单的效果图: 那么万事具备,只欠东风了.直接上代码: public class MainActivity extends AppCompatActivity imp

  • Android 仿QQ头像自定义截取功能

    看了Android版QQ的自定义头像功能,决定自己实现,随便熟悉下android绘制和图片处理这一块的知识. 先看看效果: 思路分析: 这个效果可以用两个View来完成,上层View是一个遮盖物,绘制半透明的颜色,中间挖了一个圆:下层的View用来显示图片,具备移动和缩放的功能,并且能截取某区域内的图片. 涉及到的知识点: 1.Matrix,图片的移动和缩放 2.Paint的setXfermode方法 3.图片放大移动后,截取一部分 编码实现: 自定义三个View: 1.下层View:ClipP

  • Android实现拍照截取和相册图片截取

    关于拍照截取和相册截取,看了网上很多资料,自己整理了一份比较详细的,供有需要的人参考 1  拍照 原理就是通过intent调用系统的相机,拍完照在回调进行操作,成功获取到拍完照的图片根据uri调用系统的裁剪页面,裁剪完也是在回调中进行处理,显示在页面的imageview中. 2  相册选取图片 原理也是通过intent打开系统的图片,用户选择完成以后在回调中根据图片的uri调用系统的裁剪页面,同上. 首先,定义几个常量 public static final int TAKE_PHOTO = 1

  • Android实现拍照、选择相册图片并裁剪功能

    通过拍照或相册中获取图片,并进行裁剪操作,然后把图片显示到ImageView上.  当然也可以上传到服务器(项目中绝大部分情况是上传到服务器),参考网上资料及结合项目实际情况,  测试了多款手机暂时没有发现严重问题.代码有注释,直接贴代码: public class UploadPicActivity extends Activity implements View.OnClickListener { private Button take_photo_btn; private Button s

  • 适配AndroidQ拍照和读取相册图片的实现方法

    Google发行Android Q版本也有很长一段时间了,华为应用市场已经要求要适配Android Q版本了,所以,我们也要去对Android Q进行适配. 先讲一下咱们这节用到的新特性 Android Q文件存储机制修改成了沙盒模式,类似于iOS 应用只能访问自己沙盒下的文件和公共媒体文件 如果有想具体了解Android Q新版特效的可以去 官方文档 我们在这个地方记录一下Android Q版本进行拍照保存到相册的功能. 权限问题 Android Q不再需要申请文件读写权限,默认可以读写自己沙

  • Android实现拍照或者选取本地图片

    本文实例为大家分享了Android实现拍照或者选取本地图片的具体代码,供大家参考,具体内容如下 总体流程 从selectPhotoActivity中启动图册或者相机,再根据获取的uri进行裁剪,返回uri,再对这个uri执行一系列操纵. 从相册选取图片 private void pickPhoto() {         Intent intent = new Intent(Intent.ACTION_PICK,                 android.provider.MediaSto

  • Android拍照和获取相册图片

    之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过. 再也不要问度娘了,再也不用一堆博客里找啊找了... ----------------------------------------------我是正文的分割线----------------------------------------------------------- 一个一个来,先说调用手机相机拍照(最简单版): cameraButton.setOnClickListener(new View

  • android实现拍照或从相册选取图片

    从相册或拍照更换图片功能的实现:(取图无裁剪功能) 获取图片方式: (类似更换头像的效果) 1.手机拍照 选择图片: 2.相册选取图片: 本文只是简单实现该功能,页面展示有些简陋,运行效果图如下: 创建xml布局文件(activity_main.xml ): 头部两个Button按钮,一个控制从相册选择照片,一个控制启动相册拍照选择图片.底部为一个ImageVIew,用于展示刚刚选择的图片. <?xml version="1.0" encoding="utf-8&quo

  • android系统拍照结合android-crop裁剪图片

    在一个应用中更换用户的头像,一般有拍照和从图库中选择照片两种方法,现在网上也有很多开源的,但是很多都太复杂.而 Android-crop 这个库比较小,代码不复杂,比较适合,但是它没有拍照这个功能,需要我们自己整合进去. 调用系统相机拍照 1.返回略缩图的拍照 // 调用系统的拍照 private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAP

  • Android手机拍照或选取图库图片作为头像

    package zhangpgil.photo; import java.io.File; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import android.content.Intent; import

  • Android获取本地相册图片和拍照获取图片的实现方法

    需求:从本地相册找图片,或通过调用系统相机拍照得到图片. 容易出错的地方: 1.当我们指定了照片的uri路径,我们就不能通过data.getData();来获取uri,而应该直接拿到uri(用全局变量或者其他方式)然后设置给imageView imageView.setImageURI(uri); 2.我发现手机前置摄像头拍出来的照片只有几百KB,直接用imageView.setImageURI(uri);没有很大问题,但是后置摄像头拍出来的照片比较大,这个时候使用imageView.setIm

  • Android实现读取相机(相册)图片并进行剪裁

    我们先说一下思路,在android系统中就自带了图片剪切的应用,所以,我们只需要将我们获取到的相片传给图片剪切应用,再将剪切好的相片返回到我们自己的界面显示就ok了 在开发一些APP的过程中,我们可能涉及到头像的处理,比如从手机或者相册获取头像,剪裁成自己需要的头像,设置或上传头像等.网上一些相关的资料也是多不胜数,但在实际应用中往往会存在各种问题,没有一个完美的解决方案.由于近期项目的需求,就研究了一下,目前看来还没有什么问题. 这里我们只讨论获取.剪裁与设置,上传流程根据自己的业务需求添加.

随机推荐