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

【Linux】Petalinux使用QSPI FLASH引导启动

1. 预分配Flash空间使用Flash引导Petalinux做的系统,也有进阶的做法。部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。1. 预分配Flash空间根据生成的bit文件大小估算BOOT.BIN文件的大小,为Flash大概分配四个分区:boot、bootenv、kernel、bootscr,分别存放BOOT.BIN文件、u-boot的环境变量、内核文件(image.ub/zImage/uImage等)、启动脚本boot.scr。

Tesseract_9527的博客 3375

零基础微信理财通基金实操指南(2026版)

先活下来:保证不亏大钱,再想赚钱慢慢变富:年化10%,7年翻倍,这已经很好了开始比完美重要:今天先存100元到零钱通,就是最好的开始现在打开微信,进入理财通,完成第一步风险测评吧!有任何问题可以随时问,我会用最通俗的方式解释。

老韩的Linux云计算架构师进阶之路 1686

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

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

陈英有 1180

【CV论文精读】【协同感知综述】Collaborative Perception for Autonomous Driving :Current Status and Future Trend

感知是自动驾驶系统的关键模块之一,近年来取得了很大进展。然而,单个车辆的有限能力导致感知性能提高的瓶颈。为了突破个体感知的局限,协作感知被提出,它使车辆能够共享信息来感知视线和视野之外的环境。本文综述了有前途的协作感知技术的相关工作,包括介绍了基本概念,概括了协作模式,总结了协作感知的关键要素和应用。最后,我们讨论了这一研究领域面临的挑战和问题,并给出了一些潜在的进一步方向。

weixin_44184852的博客 4689

Android 7.0下拍照和裁剪图片

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

元笙的博客 9196

EtherCat 从站开发中遇到的问题分享

EtherCat从站 AX58100

yu_arius的博客 2058

上位机 寻边器 通讯实战

寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系

StevenChen的博客 376

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

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

smileiam的专栏 3万+

Python 爬虫实战:全面解析雪球网用户投资组合数据采集

本文介绍了如何使用 Python 爬虫技术,抓取雪球网用户的投资组合信息。通过模拟登录、解析页面内容等步骤,获取了用户的持仓数据。未来,可以进一步探索以下方向:

2201_76125261的博客 1304

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

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

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

(四) OpenClaw-Skill技能全面了解和自定义技能

OpenClaw Skills是提升AI代理功能性的关键模块。本文系统介绍了Skills的核心概念、获取渠道和创建方法。Skills作为标准化指令集合,能让OpenClaw从单纯理解升级为实际执行任务,相比传统System Prompt具有模块化、可复用等优势。用户可通过Clawhub官方商店、GitHub社区等渠道获取5700+现成技能,或按需开发自定义Skill。文章详细演示了创建"Hello World"示例技能的完整流程,包括编写Python脚本、配置SKILL.md文件、部署。

直到世界的尽头 8295

雷达工程师面试题目

详细描述项目背景、目标、你的具体职责和贡献,分析在项目实施过程中遇到的主要技术难题及解决方案,总结项目取得的成果和经验教训。

道亦无名 738

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

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

cookiesMonster 520

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

weixin_33375514的博客 1288

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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、付费专栏及课程。

余额充值