http://www.2cto.com/kf/201401/270144.html

Android编程中,从相册选取或是拍照选取一张照片然后对其进行剪切的需求非常的多

之前的一篇文章只说到如何从相册中获取一张照片,今天就跟大家说说如何将获取到的相片进行剪切

完整源码下载

我们先说一下思路,在android系统中就自带了图片剪切的应用,所以,我们只需要将我们获取到的相片传给图片剪切应用,再将剪切好的相片返回到我们自己的界面显示就ok了

第一步,我们可以先激活系统图片或是相机来获取相片,看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
     * 从相册获取
     */
    public void gallery(View view) {
        // 激活系统图库,选择一张图片
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY
        startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
    }
 
    /*
     * 从相机获取
     */
    public void camera(View view) {
        // 激活相机
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        // 判断存储卡是否可以用,可用进行存储
        if (hasSdcard()) {
            tempFile = new File(Environment.getExternalStorageDirectory(),
                    PHOTO_FILE_NAME);
            // 从文件中创建uri
            Uri uri = Uri.fromFile(tempFile);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        }
        // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA
        startActivityForResult(intent, PHOTO_REQUEST_CAREMA);
    }

第二步,通过startActivityForResult()方法我们可以在onActivityResult()中来获取到相应的返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Override
    protected

void

onActivityResult(
int

requestCode,
int

resultCode, Intent data) {
        if

(requestCode == PHOTO_REQUEST_GALLERY) {
            //
从相册返回的数据
            if

(data !=
null)
{
                //
得到图片的全路径
                Uri
uri = data.getData();
                crop(uri);
            }
 
        }
else

if

(requestCode == PHOTO_REQUEST_CAREMA) {
            //
从相机返回的数据
            if

(hasSdcard()) {
                crop(Uri.fromFile(tempFile));
            }
else

{
                Toast.makeText(MainActivity.this,
"未找到存储卡,无法存储照片!",
0).show();
            }
 
        }
else

if

(requestCode == PHOTO_REQUEST_CUT) {
            //
从剪切图片返回的数据
            if

(data !=
null)
{
                Bitmap
bitmap = data.getParcelableExtra(
"data");
                this.iv_image.setImageBitmap(bitmap);
            }
            try

{
                //
将临时文件删除
                tempFile.delete();
            }
catch

(Exception e) {
                e.printStackTrace();
            }
 
        }
 
        super.onActivityResult(requestCode,
resultCode, data);
    }

第三步,注意到里边有一个crop()方法,顾名思义,就是用于剪切图片的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
     *
剪切图片
     */
    private

void

crop(Uri uri) {
        //
裁剪图片意图
        Intent
intent =
new

Intent(
"com.android.camera.action.CROP");
        intent.setDataAndType(uri,
"image/*");
        intent.putExtra("crop",
"true");
        //
裁剪框的比例,1:1
        intent.putExtra("aspectX",
1);
        intent.putExtra("aspectY",
1);
        //
裁剪后输出图片的尺寸大小
        intent.putExtra("outputX",
250);
        intent.putExtra("outputY",
250);
 
        intent.putExtra("outputFormat",
"JPEG");//
图片格式
        intent.putExtra("noFaceDetection",
true);//
取消人脸识别
        intent.putExtra("return-data",
true);
        //
开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT
        startActivityForResult(intent,
PHOTO_REQUEST_CUT);
    }

第四步,在剪切完成图片后,切图应用就会将图片通过onActivityResult()返回给我们

通过Bitmap bitmap = data.getParcelableExtra("data");我们就拿到了我们想要的bitmap

接下来拿着这个bitmap你想干嘛就干嘛吧

由于上边的代码涉及到读写sdcard,所以要记得在清单文件中授权

1
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

附上几张效果图

andorid下从相册选取/拍照选取一张相片并剪切的更多相关文章

  1. iOS开发—— UIImagePickerController获取相册和拍照

    一.简单的拍照显示,或是从相册中直接选取照片 #import "ViewController.h" @interface ViewController ()<UIImageP ...

  2. 利用 AFN 上传相册或拍照图片

    概述 自定义上传图片请求,自定义调取相册及拍照,方便多处使用时调用. 详细 代码下载:http://www.demodashi.com/demo/10718.html 由于项目中多处需要上传图片,我们 ...

  3. 转载:Android调用相册、拍照实现缩放、切割图片

    好几天没有写博客了,感觉都有点懈怠了.笔者参加了大学生第二届软件设计大赛,这几天 一直在弄大赛的事情,没有花些时间来整理博客.好在经过一些时日比赛的东西也弄得差不多了, 接下来就是将这段时间学习里面有 ...

  4. Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

    在 <Cordova webapp实战开发:(4)Android环境搭建>中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个And ...

  5. Android调用系统相册和拍照的Demo

    最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题 ...

  6. 移动端js调取手机相册和拍照功能

    前端可以通过js调取手机的相册和拍照功能,但不能拍视频!!! <!DOCTYPE html> <html lang="en"> <head> & ...

  7. Android向系统相册中插入图片,相册中会出现两张 一样的图片(只是图片大小不一致)

    向系统相册中插入图片调用此方法时,相册中会出现两张一样的图片 MediaStore.Images.Media.insertImage 一张图片是原图一张图片是缩略图.表现形式为:android4.4. ...

  8. IOS实用功能之截图(来自相册和拍照)

    // //  ViewController.m //  MyImagePicker1.0 // //  Created by Mac on 14-7-14. //  Copyright (c) 201 ...

  9. Android SDK4/5/6/7,相册、拍照及裁剪功能及遇见的坑

    保存照片和视频到系统相册显示- http://blog.csdn.net/chendong_/article/details/52290329 Android 7.0 之拍照与图片裁剪适配-http: ...

随机推荐

  1. (NO.00004)iOS实现打砖块游戏(五):游戏场景类

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 创建游戏场景类头文件 在Xcode创建新GameScene类,继 ...

  2. React Native项目组织结构介绍

    代码组织: 目录结构: . ├── components //组成应用的各个组件 │   ├── Routers.android.js //每个组件若实现不一样,分为android的实现和ios的实现 ...

  3. 【翻译】Ext JS 5:为不同设备设置不同的主题

    原文:Sencha Ext JS 5: Supporting Different Themes for Different Devices 步骤1创建一个应用程序 步骤2定义主题 步骤3编辑Appjs ...

  4. SecureCRT设置linux终端显示颜色

    在linux系统上,我们使用终端时,对于文件或目录会显示不同的颜色.而SecureCRT默认显示的颜色是单一的,我们该如何让其像linux一样显示个性化颜色呢. 使用SecureCRT登录 linux ...

  5. 关于MySQL insert into ... select 的锁情况

    摘要:       一直以为"insert into tb select * from tbx" 这样的导入操作是会把tbx表给锁住的,在锁期间是不允许任何操作(保证一致性).看完 ...

  6. Eclipse 创建 Maven 项目、Maven JavaWeb 项目

    Eclipse 创建 Maven 项目         新建一个maven项目          (默认)(如果不行第一个Create a simple ... 也选中) 默认         Jav ...

  7. Github最流行的10,000个Java项目使用的类库

    本文由 ImportNew - Andy.Song 翻译自 takipiblog.欢迎加入翻译小组.转载请见文末要求. 前言 作为Java开发人员,总是需要面临这门不断成熟.高速改进中的语言.开发人员 ...

  8. 《java入门第一季》之LinkList模拟桟结构案例

    需求:请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. 定义一个类叫MyStack代码如下: packa ...

  9. Spring揭秘 读书笔记 三 bean的scope与FactoryBean

    本书可作为王富强所著<<Spring揭秘>>一书的读书笔记  第四章 BeanFactory的xml之旅 bean的scope scope有时被翻译为"作用域&quo ...

  10. 《java入门第一季》之面向对象(private关键字与封装概念的初探)

    /* 定义一个学生类: 成员变量:name,age 成员方法:show()方法 在使用这个案例的过程中,发现了一个问题: 通过对象去给成员变量赋值,可以赋值一些非法的数据.例如:name你赋值了一个3 ...