Android 相机或相册选择图片裁剪

android 相机拍照,从相册中选择,裁剪图片全适配 在开发中我们经常会用到相机或者从相册中选择图片上传,或者设置头像. 由于系统版本问题,高版本的系统拍照和相册会出现兼容性,读写文件的问题 都是程序猿,就不废话了,直接撸代码; 一,兼容android 7.0 在AndroidManifest.xml中先申请临时访问权限,样式和activity同级 <provider android:name=... 阅读详情

背景
这是一个我们经常使用的功能,比如上传头像、身份证,本功能可选择相机或相册图片后,进入裁剪页面,并可返回Bitmap格式的图片。


工具类SelectPicUtil

public class SelectPicUtil {

    public static final int PHOTO_REQUEST_CUT = 4;
    public static final int PHOTO_REQUEST_GALLERY = 2;
    public static final int PHOTO_REQUEST_CAMERA = 3;

    private static Uri mCutTempFile; //剪切图片后输出的路径
    private static File mCameraTempFile; //拍照后的临时文件

    public static void selectPic(final Activity activity) {
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            ToastUtil.showText(activity, activity.getString(R.string.no_card), ToastUtil.ONE_SECOND);
            return;
        }

        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        builder.setItems(R.array.img_select, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case 0:
                        openCamera(activity);
                        break;
                    case 1:
                        openGallery(activity);
                        break;
                }
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }

    /*
   * 从相册获取
   */
    public static void openGallery(Activity activity) {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        activity.startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
    }

    /*
     * 从相机获取
     */
    public static void openCamera(Activity activity) {
        mCameraTempFile = new File(Environment.getExternalStorageDirectory(), "photo_file");
        Uri uri = Uri.fromFile(mCameraTempFile);

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        activity.startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
    }

    /*
    * 剪切图片
    */
    public static void openCropActivity(Activity activity,Uri uri) {
        mCutTempFile = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg");

        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        intent.putExtra("outputFormat", "JPEG");// 图片格式
        intent.putExtra("noFaceDetection", true);// 取消人脸识别
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mCutTempFile);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

        // 裁剪框的比例,1:1
        //intent.putExtra("aspectX", 1);
        //intent.putExtra("aspectY", 1);
        // 裁剪后输出图片的尺寸大小
        //intent.putExtra("outputX", 250);
        //intent.putExtra("outputY", 250);

        activity.startActivityForResult(intent, PHOTO_REQUEST_CUT);
    }

    public static Bitmap getAfterCropBitmap(Activity activity){
        File cameraTempFile2=SelectPicUtil.getCameraTempFile();
        if (cameraTempFile2 != null) {
            cameraTempFile2.delete();
        }

        Uri mCutTempFile=SelectPicUtil.getCutTempFile();
        Bitmap bitmap;
        try {
            bitmap = BitmapFactory.decodeStream(activity.getContentResolver().openInputStream(mCutTempFile));
        } catch (FileNotFoundException e) {
            return null;
        }
        return bitmap;
    }

    public static File getCameraTempFile() {
        return mCameraTempFile;
    }

    public static Uri getCutTempFile() {
        return mCutTempFile;
    }

}


Activity回调
调用此功能的页面必须实现以下功能。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case SelectPicUtil.PHOTO_REQUEST_GALLERY:
                if (data != null)  SelectPicUtil.openCropActivity(this,data.getData());
                break;
            case SelectPicUtil.PHOTO_REQUEST_CAMERA:
                File cameraTempFile=SelectPicUtil.getCameraTempFile();
                if (cameraTempFile != null) SelectPicUtil.openCropActivity(this,Uri.fromFile(cameraTempFile));
                break;
            case SelectPicUtil.PHOTO_REQUEST_CUT:
                mImageView.setImageBitmap(getAfterCropBitmap(this));
                break;
        }
    }


添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--读取储存-->


源码下载地址:地址

Android选择图片并裁剪(支持5.0) 功能:选择一张手机里的图片并裁剪。 满足伸手党。从安卓2.0~5.0都支持。 立即下载

相关推荐

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

一、 实现拍照、选择图片并裁剪图片效果 按照之前博客的风格,首先看下实现效果。      二、 uCrop项目应用 想起之前看到的Yalantis/uCrop效果比较绚,但是研究源码之后发现在定制界面方面还是有一点的限制,于是在它的基础上做了修改Android-Crop,把定制界面独立出来,让用户去自由设置。下图为使用Android-Crop实现的模仿微信选择图片并裁剪Demo。     三、 实现思路 比较简单的选择设备图片裁剪,并将裁剪后的图片保存到指定路径; 调用系统拍照,将拍照图片保存在SD卡,然后裁剪图片并将裁剪后的图片保存在指定路径。 流程图如下所示:       

android 自动剪裁图片,android使用系统裁剪图片

android系统自带的有裁剪图片功能,在应用过程中,碰到了诸多问题,在些做个记录:代码如下,注释很详细,记得加写入sd卡数据的权限public class MainActivity extends Activity {private static final int TAKE_BIG_PICTURE = 100;private static final int TAKE_SMALL_PICTUR...

weixin_30069591的博客 794

Android实现相机拍摄、选择、图片裁剪功能

自定义控件,重写ImageView 功能实现:点击圆形头像之后可以实现相册上传或者开启相机,然后把得到的图片经过剪裁,把剪裁过的图片设置为头像的背景图,需要的朋友可以参考下

Android实现相机拍照和相册选择以及图片裁剪适配Android10以上

Android实现相机拍照和相册选择以及图片裁剪适配Android10以上

Jushuzhan的专栏 1454

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 861

FPGA与GPU异构计算:重塑嵌入式AI的算力边界与场景定义

本文深入探讨了FPGA与GPU异构计算如何突破嵌入式AI的算力瓶颈。通过分析工业视觉、智能交通及航天等场景,阐述了FPGA负责高速数据采集与预处理,GPU专注复杂AI推理的协同模式,有效解决了传统单一架构在算力、功耗、接口和实时性上的挑战,为嵌入式AI应用提供了高效能解决方案。

spice的博客 486

Android 图片选择和拍照(剪辑)及压缩问题 工具类

图片选择和拍照在开发过程中,会遇到不少坑: 1.版本4.4以后选择图片后不会返回绝对路径,但返回Uri,要再查询一次 2.去剪辑时,设置了true的话直接返回bitmap,可能会很占内存,有些机子会挂掉(OOM)或者不会返回 3.图片未更好的压缩,应该做到宽高比压缩后再质量压缩,下面例子可以把几MB的图片压缩到100kb左右 4.解决7.0版本文件访问问题 下面代码处理解决了上面的问题,...

陈英有 1180

OpenDRIVE车道计算避坑指南:为什么你的poly3曲线总对不齐?

本文深入解析OpenDRIVE标准中车道几何计算的三大核心难题:参数化三次多项式(ParamPoly3)的坐标系转换与参数映射、车道偏移与宽度的优先级判定,以及螺旋线(Spiral)接续的平滑性保障。通过实战案例与代码示例,提供了一套避免车道线错位与曲率不连续的精确计算与验证方法,是高精地图开发与仿真场景构建的实用避坑指南。

q9w8e7r6t5的博客 423

Android 7.0下拍照和裁剪图片

Android 7.0下拍照和裁剪图片最近,公司的APP集中爆发了头像上传中拍照或照片裁剪的bug,让我才意识到及时学习Android新特性是多么重要,一个过去式的APP是无法一直满足日益变化的新需求,毕竟即使当时编码的开发者再牛逼,他也不可能预料到未来的技术变更,所以Android APP 兼容适配不可避免。

元笙的博客 9196

STM32硬件SPI驱动ADS1220实战:从零搭建高精度数据采集系统(附避坑指南)

本文详细介绍了使用STM32硬件SPI驱动24位高精度ADC芯片ADS1220的完整实战方案。内容涵盖从硬件设计、CubeMX工程配置、SPI通信底层实现到数据读取策略与性能优化的全流程,并重点分享了多通道切换、噪声抑制等关键避坑指南,帮助开发者构建稳定可靠的高精度数据采集系统。

o4p5q6r7s的博客 450

视觉SLAM十四讲slambook2示例代码所有依赖库的编译安装教程(VTK、OpenCV3、ceres、Sophus、g2o、Eigen、Pangolin、googletest等)

这是2021年的最后一篇博客~ 新年快乐! 0 准备工作   首先需要先安装cmake编译器: sudo apt-get install cmake   以及,将十四讲的示例代码克隆下来(十四讲的源码地址点击这里): git clone --recursive https://github.com/gaoxiang12/slambook2.git   由于里面的3rdparty文件夹内所有内容都来自于其他github仓库,所以需要加上--recursive参数,不然克隆下来的内容不完整。   如果你.

zeeq的博客 7839

Android根据图片Uri获取图片path绝对路径

在Android 编程中经常会用到Uri转化为文件路径,如我们从相册选择图片上传至服务器,一般上传前需要对图片进行压缩,这时候就要用到图片的绝对路径。 下面对我开发中uri转path路径遇到的问题进行总结,其中涉及到Android不同api下对于uri的处理,还有对于Google相册图片该如何获取其图片路径。 1. 从相册获取图片 我们从相册获取的图片的代码如下: // 激活系统图...

smileiam的专栏 3万+

SAP S/4HANA Public Cloud 配置全景实践

本文提供SAP S/4HANA Public Cloud配置的实用指南,重点介绍三大核心工具:CBC(范围界定与配置)、SAP Activate(方法论与路线图)和Cloud ALM(项目执行与运维)。文章详解了不同系统架构(2SL/3SL)的配置路径,并以制造企业案例说明端到端实施流程。同时提供了工具协同操作方法、初始访问安全建议和常见问题的专家意见,帮助项目团队高效完成实施工作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 560

Android 图片选择对话框,通过本地相册或照相机获得图片,可单选或多选,单选可设置是否裁剪

Android 图片选择对话框,通过本地相册或照相机获得图片,可单选或多选,单选可设置是否裁剪

未来很长,但我会努力的走下去。 1512

【AutoSAR】【WdgM】WdgM安全管理模块

一、WdgM在AutoSAR里的整体架构 WdgM是在autosar架构里位于服务层的一个基础软件模块;主要监督程序的执行; 主要包括三个模块: 看门狗管理器(WdgM) 看门狗接口(WdgIf) 看门狗驱动(Wdg) 二、三种监督机制 Alive监控-------主要监控周期性软件程序的时间 DeadLine监控-------主要监控非周期软件程序 程序流监控-------主要监控程序流执行的正确性 三、基于全局状态的检测流程 受监管实体(SE):Supervised Ent

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 2991

1.5 RAG技术栈全景图:LangChain vs LlamaIndex深度对比,选错框架后悔3年,一文帮你选对

摘要:LangChain与LlamaIndex框架深度对比 本文全面对比了RAG领域两大主流框架LangChain和LlamaIndex。LangChain是通用AI应用框架,具有模块化设计和丰富生态;LlamaIndex专为RAG优化,提供开箱即用解决方案。功能对比显示,LangChain在文档加载和Agent支持方面更强,而LlamaIndex在检索策略、向量存储和多模态处理上表现更优。代码示例展示了二者实现RAG的不同方式:LangChain需要更多配置但灵活性高,LlamaIndex则提供更简洁的A

yonggeit的博客 3239

Android选择图片(从相册或相机)并裁剪

原文地址点击打开链接 根据ta的代码自己写了一个,布局只有一个“选择图片”按钮和ImageView。 package com.example.mychoosephotos; import android.support.v7.app.ActionBarActivity; import android.util.Log; import java.io.BufferedOutputStream

cookiesMonster 520

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android打开相册的intent,Android 调用相机、打开相册、裁剪图片

private ImageView iv_user_photo;private String fileName = "";private File tempFile;private int crop = 300;// 裁剪大小private static final int OPEN_CAMERA_CODE = 10;private static final int OPEN_GALLERY_CO...

weixin_29368571的博客 1032

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android 图片自动裁剪图片,Android实现拍照、选择相册图片并裁剪功能

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

weixin_33375514的博客 1288

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 打开相册图片,[Android] 调用相机、打开相册、裁剪图片

private ImageView iv_user_photo;private String fileName = "";private File tempFile;private int crop = 300;// 裁剪大小private static final int OPEN_CAMERA_CODE = 10;private static final int OPEN_GALLERY_CO...

weixin_36044132的博客 269

android相机相册权限设置,Android中通过访问本地相册或者相机设置用户头像实例...

目前几乎所有的APP在用户注册时都会有设置头像的需求,大致分为三种情况:(1)通过获取本地相册的图片,经过裁剪后作为头像。(2)通过启动手机相机,现拍图片然后裁剪作为头像。(3)在APP中添加一些自带的头像资源,供用户选择(不够人性化,目前很少使用)。这次我们简单介绍下通过获取本地相册以及相机拍摄的方法设置头像,实现思路如下:(1)通过startActivityForResult方法,分别传递调用...

weixin_35650041的博客 1738

Android 调用相机裁剪图片,和调用相册裁剪图片,动态申请相机权限和sd的读写权限

因为拍照之后得裁剪图片,把裁剪之后的图片保存在sd中,首先动态申请sd的读写权限 private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; priv

sungeAndroid的博客 805

Android 调用相册或相机选择图片

/** * 裁剪 * * @param */ protected void cropPic(File file) { if (!file.exists()) { Toast.makeText(this, "图片不存在", Toast.LENGTH_LONG).show(); return

安卓学习之路 463

Android设置头像,手机拍照或从本地相册选取图片作为头像

【Android设置头像,手机拍照或从本地相册选取图片作为头像】 像微信、QQ、微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1,让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像。 2,让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像。 我现在写一个简单的完整代码例子,说明如何在Android中实现上述两个头像设置功能。

Lemuel的博客 1919

android 拍照裁剪图片,Android实现从本地图库/相机拍照后裁剪图片并设置头像

玩qq或者是微信的盆友都知道,这些聊天工具里都要设置头像,一般情况下大家的解决办法是从本地图库选择图片或是从相机拍照,然后根据自己的喜爱截取图片。上述过程已经实现好了,最后一步我加上了把截取好的图片在保存到本地的操作,来保存头像。为了大家需要,下面脚本之家小编把完整的代码贴出来供大家参考。先给大家展示效果图: 代码部分:布局代码(其实就是两个按钮和一个ImageView来显示头像)android:...

weixin_34553415的博客 623

android 拍照换头像,Android调用相机拍照,裁剪及更换头像功能的实现

1,点击弹出popwindow,选择相机或者相册这个就不多说了,在OnclickListener里写弹出的窗口位置和样式。2,选择拍照功能,调用手机相机。```//调用相机Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");if (isExistSd()) {intent.putExtra(MediaStore.EXTR...

weixin_36058303的博客 535
上一篇: Android开发中常犯的错误
下一篇: Activity切换动画效果
A_xun_A
博客等级 码龄17年 10粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值