##需求:个人界面的,个人头像图片的切换

方式一:点击开始切换头像的pop–相册选择

二:这里有两种方式,从相册选择和直接拍照,假设现在是从相册选择选择头像

*我在pop确定的点击方法中写了一个方法—–实现打开系统的相册并且获取到照片路径,在这里我们一开始就设置了请求码,用来区分onActivityResult,然后在本Activity中通过onActivityResult方法中通过请求码做相对应的处理

第一步:打开系统的相册

 /*** 从相册获取*/protected void toAlbum() {try {Intent intentFromGallery = new Intent();intentFromGallery.setType("image/*"); // 设置文件类型intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);LogUtil.e("第1步","第1步"+"第1步,开始从相册获取");startActivityForResult(intentFromGallery, IMAGE_REQUEST_CODE);} catch (Exception e) {e.printStackTrace();}}

第二步:获取图片(在onActivityResult()中处理)

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// 结果码不等于取消时候if (resultCode != RESULT_CANCELED) {switch (requestCode) {case REQ_RESULT_EDITE_SET:String text=data.getStringExtra(EditSetActivity.KEY_OBJ_CONTENT);et_person_nickname.setText(""+text);break;case IMAGE_REQUEST_CODE:  //这个是打开相册的请求码LogUtil.e("第二步","第二步"+"第二步,打开系统裁剪工具");LogUtil.e("第二步","第二步"+data.getData());//content://media/external/images/media/9423resizeImage(data.getData());  //第三步调用这个方法进行裁剪break;case CAMERA_REQUEST_CODE:if (FileUtil.isSDCardEnable()) {File file = new File(Environment.getExternalStorageDirectory(), IMAGE_FILE_NAME);resizeImage(Uri.fromFile(file));} else {
//                        showToast("未找到存储卡,无法存储照片!");ToastUtil.showShort(PersonalInfoActivity.this, "未找到存储卡,无法存储照片!");}break;case RESIZE_REQUEST_CODE:if (data != null) {showResizeImage(data);LogUtil.e("第4步","第4步"+"第4步,裁剪完成");}break;}}super.onActivityResult(requestCode, resultCode, data);}

第三步:获取到图片,再调用系统裁剪,开始裁剪

 /*** 裁剪图片* @param uri*/public void resizeImage(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");intent.putExtra("crop", "true");intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1);intent.putExtra("outputX", 150);intent.putExtra("outputY", 150);intent.putExtra("return-data", true);LogUtil.e("第三步","第三步"+"第三步,开始裁剪");//打开裁剪的activity,并且获取到裁剪图片(在第二步的RESIZE_REQUEST_CODE请求码中处理)startActivityForResult(intent, RESIZE_REQUEST_CODE);}

效果图

第四步:获取裁剪的图片,并且设置图片 (到此,图片相册设置头像完成)

    /*** 获取到裁剪的图片,(并且设置到imageview)* @param data*/private void showResizeImage(Intent data) {Bundle extras = data.getExtras();if (extras != null) {Bitmap photo = extras.getParcelable("data");file = FileUtil.saveBitmapToFile(photo, Environment.getExternalStorageDirectory().toString(), IMAGE_FILE_NAME);Drawable drawable = new BitmapDrawable(photo);iv_person.setImageDrawable(drawable);}}

================华丽的分割线===============================

方式二:点击开始切换头像的pop–拍照

第一步:打开系统的相机

    /*** 拍照*/protected void toCamera() {try {//MediaStore.ACTION_IMAGE_CAPTURE    表示拍照到指定的目录Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 判断存储卡是否可以用,可用进行存储if (FileUtil.isSDCardEnable()) {//参数(MediaStore.EXTRA_OUTPUT,uri)//图片保存为临时文件 == EXTRA_OUTPUTintentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "face.jpg")));}startActivityForResult(intentFromCapture, CAMERA_REQUEST_CODE);} catch (Exception e) {e.printStackTrace();}}

第二步:拍完之后再onActivityResult中,通过请求码区分处理

onActivityResult() //方法中case CAMERA_REQUEST_CODE:  //拍完照的if (FileUtil.isSDCardEnable()) {File file = new File(Environment.getExternalStorageDirectory(), "face.jpg");resizeImage(Uri.fromFile(file));} else {
//                        showToast("未找到存储卡,无法存储照片!");ToastUtil.showShort(PersonalInfoActivity.this, "未找到存储卡,无法存储照片!");}break;

第三步:获取到图片,再调用系统裁剪,开始裁剪

 /*** 裁剪图片* @param uri*/public void resizeImage(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");intent.putExtra("crop", "true");intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1);intent.putExtra("outputX", 150);intent.putExtra("outputY", 150);intent.putExtra("return-data", true);LogUtil.e("第三步","第三步"+"第三步,开始裁剪");//打开裁剪的activity,并且获取到裁剪图片(在第二步的RESIZE_REQUEST_CODE请求码中处理)startActivityForResult(intent, RESIZE_REQUEST_CODE);}

第四步:获取裁剪的图片,并且设置图片 (到此,图片拍照设置头像完成)

    /*** 获取到裁剪的图片,(并且设置到imageview)* @param data*/private void showResizeImage(Intent data) {Bundle extras = data.getExtras();if (extras != null) {Bitmap photo = extras.getParcelable("data");file = FileUtil.saveBitmapToFile(photo, Environment.getExternalStorageDirectory().toString(), IMAGE_FILE_NAME);Drawable drawable = new BitmapDrawable(photo);iv_person.setImageDrawable(drawable);}}

以上就是两种方式上传图像的方式
使用的utile贴在下面

FileUtil

package com.lzyc.ybtappcal.util;import android.graphics.Bitmap;
import android.os.Environment;
import android.os.StatFs;import com.lzyc.ybtappcal.app.App;
import com.lzyc.ybtappcal.exception.ServiceRulesException;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;/** Author: lovelin* * Created Date:2015-4-7* Copyright @ 2015 BU* Description: 文件工具类** History:*/
public class FileUtil {public static String appFile = App.AppFilePath;// 默认app文件目录public static final String baseFile = Environment.getExternalStorageDirectory() + File.separator;public static final String appBaseFile = baseFile + appFile+ File.separator;boolean sdCardExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);// 是否有存储设备public FileUtil() throws ServiceRulesException {if (!sdCardExist)throw new ServiceRulesException("请插入外部SD存储卡");File fileBase = new File(appBaseFile);if (!fileBase.exists())fileBase.mkdir();}/*** 创建一个文件目录** @return void* @author Lucifer 2015-4-8 下午8:02:31*/public static File creatFileDirectory(String path) {File file = new File(appBaseFile + File.separator + path);if (!file.exists()) {file.mkdirs();}return file;}/*** 创建一个文件** @param path* @param fileName* @return File* @author Lucifer 2015-4-8 下午8:28:54*/public static File creatNewFile(String path, String fileName) {File file = null;creatFileDirectory(path);file = new File(appBaseFile + File.separator + path + File.separator+ fileName);return file;}/*** 将图片写入当前文件中** @param photo* @param path* @param fileName* @return File* @author Lucifer 2015-4-8 下午8:38:17*/public static File saveBitmapToFile(Bitmap photo, String path, String fileName) {File file = null;file = creatNewFile(path, fileName);FileOutputStream fOut = null;try {fOut = new FileOutputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();}photo.compress(Bitmap.CompressFormat.JPEG, 100, fOut);try {fOut.flush();} catch (IOException e) {e.printStackTrace();}try {fOut.close();} catch (IOException e) {e.printStackTrace();}return file;}/*** 写到sd卡* @param path* @param fileName* @param inputStream* @return File* @author luxf 2015-5-26 下午2:37:43*/public static File write2SDFormInput(String path, String fileName,InputStream inputStream) {// 创建文件File file = creatNewFile(path, fileName);OutputStream outputStream = null;try {// 创建输出流outputStream = new FileOutputStream(file);// 创建缓冲区byte buffer[] = new byte[4 * 1024];// 写入数据while ((inputStream.read(buffer)) != -1) {outputStream.write(buffer);}// 清空缓存outputStream.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}return file;}/*** 获取文件大小** @param file* @return long* @throws Exception* @author Administrator 2015-6-14 下午8:22:02*/public static long getFileSize(File file) throws Exception {long size = 0;File flist[] = file.listFiles();for (int i = 0; i < flist.length; i++) {if (flist[i].isDirectory()) {size = size + getFileSize(flist[i]);} else {size = size + flist[i].length();}}return size;}/*** 转换文件 大小** @param fileS* @return String* @author Administrator 2015-6-14 下午8:22:14*/public static String FormetFileSize(long fileS) {// 转换文件大小DecimalFormat df = new DecimalFormat("#.00");String fileSizeString = "";if (fileS == 0) {fileSizeString = "0.0B";} else if (fileS < 1024) {fileSizeString = df.format((double) fileS) + "B";} else if (fileS < 1048576) {fileSizeString = df.format((double) fileS / 1024) + "K";} else if (fileS < 1073741824) {fileSizeString = df.format((double) fileS / 1048576) + "M";} else {fileSizeString = df.format((double) fileS / 1073741824) + "G";}return fileSizeString;}/*** 递归删除文件和文件夹** @param file 要删除的根目录*/public static void RecursionDeleteFile(File file) {if (file.isFile()) {file.delete();return;}if (file.isDirectory()) {File[] childFile = file.listFiles();if (childFile == null || childFile.length == 0) {file.delete();return;}for (File f : childFile) {RecursionDeleteFile(f);}file.delete();}}/*** 判断文件是否存在** @param path* @param fileName* @return boolean* @author Administrator 2015-6-16 下午10:32:40*/public static boolean isFileExistes(String path, String fileName) {try {File f = new File(path + fileName);if (!f.exists()) {return false;}} catch (Exception e) {return false;}return true;}/*** 判断SDCard是否可用** @return*/public static boolean isSDCardEnable() {return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);}/*** 获取SD卡路径** @return*/public static String getSDCardPath() {return Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator;}/*** 获取SD卡的剩余容量 单位byte** @return*/public static long getSDCardAllSize() {if (isSDCardEnable()) {StatFs stat = new StatFs(getSDCardPath());// 获取空闲的数据块的数量long availableBlocks = (long) stat.getAvailableBlocks() - 4;// 获取单个数据块的大小(byte)long freeBlocks = stat.getAvailableBlocks();return freeBlocks * availableBlocks;}return 0;}/*** 获取指定路径所在空间的剩余可用容量字节数,单位byte** @param filePath* @return 容量字节 SDCard可用空间,内部存储可用空间*/public static long getFreeBytes(String filePath) {// 如果是sd卡的下的路径,则获取sd卡可用容量if (filePath.startsWith(getSDCardPath())) {filePath = getSDCardPath();} else {// 如果是内部存储的路径,则获取内存存储的可用容量filePath = Environment.getDataDirectory().getAbsolutePath();}StatFs stat = new StatFs(filePath);long availableBlocks = (long) stat.getAvailableBlocks() - 4;return stat.getBlockSize() * availableBlocks;}
}

个人界面 头像 图片选择(相册,拍照)--如何调用系统的相册,裁剪并且上传相关推荐

  1. 【微信小程序】图片选择、转码、压缩、预览、上传,file与base64

    0 前言 微信小程序中,上传图片,如标题,涉及图片选择.图片转码.图片压缩.图片预览.图片上传等 1 图片选择 需要使用微信提供的wx.chooseMedia chooseImage() {var t ...

  2. Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题

    Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题 1.调用相机,兼容7.0 AndroidManifest配置 <providera ...

  3. android头像相册/拍照选取,裁剪及上传综合案例

    在android项目中,很多情况下上传头像的需求,像qq,新浪微博,微信,飞信等很多应用都有这样的功能. 之前我写过的两篇文章:andorid下从相册选取/拍照选取一张相片并剪切和android下Bi ...

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

    图片选择和拍照在开发过程中,会遇到不少坑: 1.版本4.4以后选择图片后不会返回绝对路径,但返回Uri,要再查询一次 2.去剪辑时,设置了true的话直接返回bitmap,可能会很占内存,有些机子会挂 ...

  5. html上传图片裁剪,基于HTML5+JS实现本地图片裁剪并上传功能

    基于HTML5+JS实现本地图片裁剪并上传功能 2019-01-07 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了基于HTML5+JS实现本地图片裁剪并上传功 ...

  6. vue本地上传并预览php,vue.js 实现图片本地预览 裁剪 压缩 上传功能

    以下代码涉及 Vue 2.0 及 ES6 语法. 目标 纯 javascrpit 实现,兼容ie9及以上浏览器,在本地做好文件格式.长宽.大小的检测,减少浏览器交互. 现实是残酷的,为了兼容Ie9 还 ...

  7. vue实现图片裁剪后上传

    一.背景 目前负责的系统(商城后台管理系统)里面有这么一个需求,为了配合前台的展示,上传的商品图片比较必须是1:1的正方形.(其它地方有时会有5:4或者16:9的需求,但较少).所以需要对上传的图片先 ...

  8. ie js html 压缩,H5图片裁剪-压缩-上传-神奇的Croppie.js

    Croppie.js之图片裁剪压缩上传 h5图片裁剪, 压缩, 上传, 预览是常见功能, 幸运的是我们有cropp.js这款利器. 1. style .actions button, .actions ...

  9. 使用南尘的ImagePicker实现仿微信的相册图片选择以及拍照上传

    在记录之前先放上原作的GitHub项目地址:ImagePicker 南尘的框架写得相当不错,我们可以在我们的项目中添加依赖直接使用,但是我在使用的时候发现了一个小bug,就在图片预览的界面选择了图片后 ...

最新文章

  1. openssl 非对称加密 RSA 加密解密以及签名验证签名
  2. C语言 变量 函数 (类型、作用域、生命周期、存储位置)
  3. React.js 开发常见问题
  4. C# List.sort排序详解(多权重,升序降序)
  5. 简单谈谈haskell
  6. 最新试客联盟JS逆向分析
  7. 计算机课外作业,东南大学微机课外作业
  8. JavaSE 学习笔记之正则表达式(二十五)
  9. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-2. 输入控件)...
  10. spring mvc 静态资源拦截
  11. Vant(有赞)UI框架爬坑记——图片轮播+预览
  12. 雷曼 疯狂兔子 java_《雷曼:疯狂兔子》详细流程攻略+个人心得分享
  13. 单侧置信上限matlab,单侧置信限.PPT
  14. 操作数据库方法总结1——JDBC、连接池与JDBCTemplate
  15. python人物抠图算法_比PS还好用!Python 20行代码批量抠图
  16. 将两张(多张图片)合成一张图片
  17. 基于SpringBoot框架的古风乐曲网站的设计与实现 毕业设计-附源码271611
  18. 计算机保研学校推荐信,保研推荐信范文(7篇)
  19. 基于51单片机——LED数码管秒表的制作
  20. 怎样调用通达信l2行情接口?

热门文章

  1. 全网显示 IP 归属地,用上这个开源库,实现也太简单了
  2. 硬盘显示参数错误的资料找回方案
  3. 用JAVA实现简单的扑克牌洗牌发牌并排序
  4. linux 耳机设备文件,Linux 声卡设置(喇叭和耳机同时出声的解决)
  5. Windows8用起来好别扭
  6. java实现VEBTree
  7. 生成对抗网络GAN资料汇总(附pdf下载)
  8. 未能从程序集“**\Microsoft.Build.Tasks.v12.0.dll”加载任务工厂“CodeTaskFactor”
  9. 笔记本电脑休眠和睡眠时,它还在工作吗??
  10. 微服务Spring Boot 整合 Redis 实现 好友关注