iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android拍照和获取相册图片
  • 695
分享到

Android拍照和获取相册图片

图片android拍照Android 2022-06-06 07:06:03 695人浏览 泡泡鱼
摘要

之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过。  再也不要问度娘了,再也不用一堆博客里找啊找了。。。  --

之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过。 

再也不要问度娘了,再也不用一堆博客里找啊找了。。。 

----------------------------------------------我是正文的分割线----------------------------------------------------------- 

一个一个来,先说调用手机相机拍照(最简单版):


 cameraButton.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
  Intent intent=new Intent(MediaStore.ACTioN_IMAGE_CAPTURE);
  startActivityForResult(intent,TAKE_PHOTO);
 }
});
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if(resultCode==RESULT_OK){
  Bundle bundle=data.getExtras();
  Bitmap bitmap=(Bitmap)bundle.get("data");
  photoImageView.setImageBitmap(bitmap);
 }
}

 这个方法简单是简单了,但是得到的图片却是缩略图,通常都非常模糊,很多时候并不满足我们的要求,我们需要的是获取拍照所得照片的原图。

而通常想要获取拍照所得原图的方法,我们首先会自定义图片名称,确认图片存储位置,之后根据图片位置Uri,自然可以获得原图Bitmap。代码如 


 
 private File createImgFile(){
  //确定文件名
  String fileName="img_"+new SimpleDateFORMat("yyyyMMdd_HHmmss").format(new Date())+".jpg";
//  File dir=getExternalFilesDir(Environment.DIRECTORY_PICTURES);
//  File dir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
//  File dir=Environment.getExternalStorageDirectory();
  File dir;
  if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
   dir=Environment.getExternalStorageDirectory();
  }else{
   dir=getExternalFilesDir(Environment.DIRECTORY_PICTURES);
  }
  File tempFile=new File(dir,fileName);
  try{
   if(tempFile.exists()){
    tempFile.delete();
   }
   tempFile.createNewFile();
  }catch (IOException e){
   e.printStackTrace();
  }
  //获取文件路径
  photoPath=tempFile.getAbsolutePath();
  return tempFile;
 }
 //拍照
 cameraButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
   //只是加了一个uri作为地址传入
   Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
   File photoFile=createImgFile();
   photoUri=Uri.fromFile(photoFile);
   intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);
   startActivityForResult(intent,TAKE_PHOTO);
  }
 });

 代码应该非常清楚,我们定义了图片名称,将uri传入,那么我们在onActivityResult中就可以得到这个uri,之后岂不是可以直接根据uri得到bitmap了?例如这样: 
Bitmap bitmap=MediaStore.Images.Media.getBitmap(getContentResolver(),photoUri);
photoImageView.setImageBitmap(bitmap);这样做起来是没错的,可惜通常我们手机的摄像头大多非常高清,拍摄出来的照片如果直接加载到手机内存里面,恐怕就啦啦啦啦啦啦了…… 

那么,我们唯一能想到的,就只有开始压缩图片了: 


 
 private void setImageBitmap(){
  //获取imageview的宽和高
  int targetWidth=photoImageView.getWidth();
  int targetHeight=photoImageView.getHeight();
  //根据图片路径,获取bitmap的宽和高
  BitmapFactory.Options options=new BitmapFactory.Options();
  options.inJustDecodeBounds=true;
  BitmapFactory.decodeFile(photoPath,options);
  int photoWidth=options.outWidth;
  int photoHeight=options.outHeight;
  //获取缩放比例
  int inSampleSize=1;
  if(photoWidth>targetWidth||photoHeight>targetHeight){
   int widthRatio=Math.round((float)photoWidth/targetWidth);
   int heightRatio=Math.round((float)photoHeight/targetHeight);
   inSampleSize=Math.min(widthRatio,heightRatio);
  }
  //使用现在的options获取Bitmap
  options.inSampleSize=inSampleSize;
  options.inJustDecodeBounds=false;
  Bitmap bitmap=BitmapFactory.decodeFile(photoPath,options);
  photoImageView.setImageBitmap(bitmap);
 }

以上就是调取相机拍照的全部代码,当然WRITE_EXTERNAL_STORAGE这个权限肯定是要加的。

还有一件经常出现的事,就是可能你拍照之后,照片并没有及时出现在手机相册中,而是需要手机重启之后才会出现。其实我们只需要发送一条广播,就可以将图片添加进手机相册,代码如下: 


 //将图片添加进手机相册
 private void galleryAddPic(){
  Intent mediaScanIntent=new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
  mediaScanIntent.setData(photoUri);
  this.sendBroadcast(mediaScanIntent);
 }

困难已经过去,相对而言,从相册里选取照片,简直再简单不过,我相信只要看下代码就会懂了,不信你看: 


 //从相册获取照片
 albumButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
   //Intent intent=new Intent(Intent.ACTION_PICK);
   Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
   intent.setType("image/*");
   startActivityForResult(intent,PICK_PHOTO);
  }
 });
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if(resultCode==RESULT_OK){
   switch (requestCode){
    case TAKE_PHOTO:
     setImageBitmap();
     galleryAddPic();
     break;
    case PICK_PHOTO:
     //data中自带有返回的uri
     photoUri=data.getData();
     //获取照片路径
     String[] filePathColumn={MediaStore.Audio.Media.DATA};
     Cursor cursor=getContentResolver().query(photoUri,filePathColumn,null,null,null);
     cursor.moveToFirst();
     photoPath=cursor.getString(cursor.getColumnIndex(filePathColumn[0]));
     cursor.close();
     //有了照片路径,之后就是压缩图片,和之前没有什么区别
     setImageBitmap();
     break;
   }
  }
 }

 很简单吧,我们在onActivityResult()中根据data获取到了所选图片的uri,之后只要一步查询,就可以得到图片路径。而有了照片路径,就没有任何问题了。

整个demo到这里就结束了,接下来的内容可以不必看,demo下载链接:下载地址 

自问自答时间:
 问:SD卡是什么?因为在我创建File的时候,目录文件默认使用的是Environment.getExternalStorageDirectory(),而在使用之前是需要检测状态的, 也就是这句Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED),询问SD卡是否正确安装。我用了一部新手机,依旧是正确安装的。
答:手机是有内置sd卡的,所以哪怕我买了新手机,但是依旧可以检测到sd卡的存在。 

一个有意思的回答是说,内置的sd卡类似于电脑硬盘,外界的sd卡类似于移动硬盘,但也不确定是否正确。 

问:创建File的时候,几个不同的目录文件分别什么意思?有什么不同?

答:直接看测试结果吧,Environment.getExternalStorageDirectory()的地址:/storage/emulated/0 
Environment.getExternalStoragePublicDirectory()的地址:/storage/emulated/0/Pictures
getExternalFilesDir()的地址:/storage/emulated/0/Android/data/com.example.notificationapp/files/Pictures 

问:从相册选取照片的时候,好像有个两个Intent都可以,有什么区别?

答:Intent intent=new Intent(Intent.ACTION_PICK);
 Intent intent=new Intent(Intent.ACTION_GET_CONTENT); 

这两个确实都可以从相册选取照片,但是具体有什么区别,好吧,我没搞明白。

您可能感兴趣的文章:android获取相册图片和路径的实现方法android照相、相册获取图片剪裁报错的解决方法android中打开相机、打开相册进行图片的获取示例Android实现长按图片保存至相册功能Android实现保存图片到本地并在相册中显示Android从相册选择图片剪切和上传Android 打开相册选择单张图片实现代码Android开发从相册中选取照片的示例代码


--结束END--

本文标题: Android拍照和获取相册图片

本文链接: https://www.lsjlt.com/news/24158.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android实现拍照或从相册选取图片
    从相册或拍照更换图片功能的实现:(取图无裁剪功能) 获取图片方式: (类似更换头像的效果) 1、手机拍照 选择图片; 2、相册选取图片; 本文只是简单实现该功能,页面展示有些简陋,...
    99+
    2024-04-02
  • 如何适配AndroidQ拍照和读取相册图片?
    不懂如何适配AndroidQ拍照和读取相册图片??其实想解决这个问题也不难,下面让小编带着大家一起学习怎么去解决,希望大家阅读完这篇文章后大所收获。Google发行Android Q版本也有很长一段时间了,华为应用市场已经要求要适配Andr...
    99+
    2023-05-30
  • 微信小程序实现拍照和相册选取图片
    本文实例为大家分享了微信小程序实现拍照和相册选取图片的具体代码,供大家参考,具体内容如下 布局: <!--pages/camera/camera.wxml--> &l...
    99+
    2024-04-02
  • 微信小程序如何实现拍照和相册选取图片
    这篇文章将为大家详细讲解有关微信小程序如何实现拍照和相册选取图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下布局:<!--pages/camera/camera.wxml-->&...
    99+
    2023-06-15
  • Android通过手机拍照或从本地相册选取图片设置头像
    像微信、QQ、微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像。 让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像。 ...
    99+
    2023-05-31
    android 头像 本地相册
  • 小程序从相册获取图片并上传及使用相机拍照功能的方法
    今天小编给大家分享一下小程序从相册获取图片并上传及使用相机拍照功能的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.i...
    99+
    2023-06-26
  • 怎么在android中实现拍从相册中选取图片
    这篇文章将为大家详细讲解有关怎么在android中实现拍从相册中选取图片,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。获取图片方式: (类似更换头像的效果)手机拍照 选择图片;2、相册选取图...
    99+
    2023-06-14
  • Android应用如何获取相册中的图片
    这篇文章给大家介绍Android应用如何获取相册中的图片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。容易出错的地方:当我们指定了照片的uri路径,我们就不能通过data.getData();来获取uri,而应该直接拿...
    99+
    2023-05-31
    android roi
  • Android获取照片、裁剪图片、压缩图片
    前言在做上一个项目时深深受到了图片上传的苦恼。图片上传主要分为两个部分,首先要获取图片,而获取图片可以分为从文件获取或者拍照获取。第二个部分才是上传图片,两个部分都是走了不少弯路。由于Android系统的碎片化比较严重,我们可能出现在第一台...
    99+
    2023-05-31
    android 获取照片 裁剪图片
  • Android实现拍照或者选取本地图片
    本文实例为大家分享了Android实现拍照或者选取本地图片的具体代码,供大家参考,具体内容如下 总体流程 从selectPhotoActivity中启动图册或者相机,再根...
    99+
    2024-04-02
  • Android读取本地照片和视频相册实例代码
    前言项目中经常要选择本地照片或者视频的需求,如果去扫描整个SD卡就太耗时间,其实Android系统在启动时就已经把整个设备中的多媒体文件信息(文件名,类型,大小等)都存到了数据库,然后提供了ContentPrivider这个API来管理这个...
    99+
    2023-05-31
    android 相册 roi
  • 使用Android怎么从相册中选取照片
    使用Android怎么从相册中选取照片?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。(1)直接选择相册后返回第一步就是主要跳转的相册 //在这里跳转到...
    99+
    2023-05-30
    android
  • 微信小程序中怎么实现拍照或从相册选取图片上传
    这篇文章主要讲解了“微信小程序中怎么实现拍照或从相册选取图片上传”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序中怎么实现拍照或从相册选取图片上传”吧!发现问题老大要让我实现下载xl...
    99+
    2023-06-30
  • 小程序如何获取本地相册及开发拍照功能
    这篇文章主要介绍“小程序如何获取本地相册及开发拍照功能”,在日常操作中,相信很多人在小程序如何获取本地相册及开发拍照功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序如何获取本地相册及开发拍照功能”的疑...
    99+
    2023-06-26
  • 微信小程序中如何实现拍照或从相册选取图片上传
    这篇文章主要介绍了微信小程序中如何实现拍照或从相册选取图片上传,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。upload.wxml<!...
    99+
    2024-04-02
  • Android如何实现拍照或者选取本地图片
    这篇文章主要介绍Android如何实现拍照或者选取本地图片,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下总体流程从selectPhotoActivity中启动图册或者相机,再根据获取的uri进行...
    99+
    2023-06-29
  • Android如何实现拍照及图片裁剪
    这篇文章主要介绍Android如何实现拍照及图片裁剪,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近做项目中涉及到了图片相关功能 ,在使用安卓6.0手机及7.1手机拍照时,遇到了因权限及文件管理导致程序崩溃等问题。...
    99+
    2023-05-30
    android6.0
  • Android Flutter怎么使用相机实现拍摄照片
    本篇内容介绍了“Android Flutter怎么使用相机实现拍摄照片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用相机前的准...
    99+
    2023-07-05
  • Android 保存图片到相册
    保存图片的方式分为两种: Android Q 以上 Android Q 以下 补充知识: Android Q 以上的保存图片 保存到应用的内部存储空间 (内部存储) 保存到 Android 系统设置的共享存储空间(外部储存) 图片(包括照片...
    99+
    2023-08-31
    android
  • H5如何调用相机拍照并压缩图片
    这篇文章给大家分享的是有关H5如何调用相机拍照并压缩图片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景最近要做一个h6的页面,主要功能就是调用相机拍照或者是相册选图并且把照片...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作