保存图片小的一般操作步骤:

1. 调用系统相机

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);

2. 保存照片

@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
  System.out.println("onActivityResult start");
  
  if (resultCode == Activity.RESULT_OK) {
   System.out.println("enter");
        String sdStatus = Environment.getExternalStorageState(); 
        if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 
            Log.i("TestFile", 
                    "SD card is not avaiable/writeable right now.");
            System.out.println("SD card is not avaiable/writeable right now.");
            return; 
        } 
        String name = System.currentTimeMillis() + ".jpg";;    
        //Toast.makeText(this, name, Toast.LENGTH_LONG).show(); 
        Bundle bundle = data.getExtras(); 
        Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式 
     
        FileOutputStream b = null; 
        File file = new File("/mnt/sdcard/DCIM/Camera/"); 
        file.mkdirs();// 创建文件夹 
        System.out.println("mkdirs");
        String fileName = "/mnt/sdcard/DCIM/Camera/"+name; 
 
            try { 
                b = new FileOutputStream(fileName); 
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件 
        } catch (FileNotFoundException e) { 
            e.printStackTrace();
        } finally { 
            try { 
                b.flush(); 
                b.close(); 
            } catch (IOException e) { 
                e.printStackTrace();
            } 
        } 
 

小图片的造成的原因,从返回值中取照片的数据是已经被压缩了,要想不被压缩我们可以在调用系统相机时指定照片的保存位置

private String camera_path = Environment.getExternalStorageDirectory().toString() + "/Photo_LJ/";//照片保存位置

private String camera_photo_name;// 保存的名称


Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        File path1 = new File(camera_path);

        if (!path1.exists()) {

            path1.mkdirs();

        }

        camera_photo_name = System.currentTimeMillis() + ".jpg";

        File file = new File(path1, camera_photo_name);

        // mOutPutFileUri = Uri.fromFile(file);

        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));

        startActivityForResult(intent, 1);

重载方法

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); switch (requestCode) {
case TAKE_PICTURE:
if (resultCode == RESULT_OK)
String filename = camera_path + "/" + camera_photo_name;
Bitmap bm = compressImageFromFile(filename); ImageItem takePhoto = new ImageItem();
takePhoto.setBitmap(bm);
Bimp.tempSelectBitmap.add(takePhoto);
}
break;
}

照片很大,要显示出来我们最好对它进行一下压缩

private Bitmap compressImageFromFile(String srcPath) {
BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = false;// 只读边,不读内容
Bitmap bitmap = BitmapFactory.decodeFile(srcPath, null); newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
float hh = 800f;//
float ww = 480f;//
int be = 1;
if (w > h && w > ww) {
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {
be = (int) (newOpts.outHeight / hh);
}
if (be <= 0)
be = 1;
newOpts.inSampleSize = be;// 设置采样率 // newOpts.inPreferredConfig = Config.ARGB_8888;//该模式是默认的,可不设
newOpts.inPurgeable = true;// 同时设置才会有效
newOpts.inInputShareable = true;// 。当系统内存不够时候图片自动被回收 bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
// return compressBmpFromBmp(bitmap);//原来的方法调用了这个方法企图进行二次压缩
// 其实是无效的,大家尽管尝试
return bitmap;
}

好了,可以到照片保存的位置检查一下了,已经是2M左右大小的照片了。

Android调用系统相机拍照保存照片很小解决方案的更多相关文章

  1. Android 调用系统相机拍照保存以及调用系统相册的方法

    系统已经有的东西,如果我们没有新的需求的话,直接调用是最直接的.下面讲讲调用系统相机拍照并保存图片和如何调用系统相册的方法. 首先看看调用系统相机的核心方法: Intent camera = new ...

  2. android 调用系统相机拍照 获取原图

      好吧,为了这个问题又折腾了一整天.之前在网上找来的方法,如果在onActivityResult中直接用data.getData()的方式来生成bitmap,其实获取的是拍照生成的缩略图!看看尺寸就 ...

  3. android调用系统相机拍照并保存在本地

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  4. Android 调用系统相机拍照,生命周期重走OnCreate,导致无数据的解决办法

    extends:http://blog.csdn.net/b275518834/article/details/42347903 BUG具体体现为 : (1) 摄像头拍照后图片数据不一定能返回 ; o ...

  5. Android 调用系统相机拍照并获取原图

    第一步:调用相机 Intent getImageByCamera = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); St ...

  6. 【踩坑速记】MIUI系统BUG,调用系统相机拍照可能会带给你的一系列坑,将拍照适配方案进行到底!

    一.写在前面 前几天也是分享了一些学习必备干货(还没关注的,赶紧入坑:传送门),也好久没有与大家探讨技术方案了,心里也是挺痒痒的,这不,一有点闲暇之时,就迫不及待把最近测出来的坑分享给大家. 提起An ...

  7. Android下载图片/调用系统相机拍照、显示并保存到本地

    package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException ...

  8. Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片

    Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ...

  9. Android 调用系统照相机拍照和录像

    本文实现android系统照相机的调用来拍照 项目的布局相当简单,只有一个Button: <RelativeLayout xmlns:android="http://schemas.a ...

随机推荐

  1. pre 布局

    w

  2. php accumulation rockmongo

    php -r 'echo substr(sprintf("%o",fileperms("./")),-4);'

  3. Career Planning:Developers Best Practices Tutorial

    This small tutorial is based on my past 16+ years of experience in software development industry. I ...

  4. VS c++ opencv画图

    任务:用c++在图片上画线 之前用过python的opencv,所以直接想到了用c++的opencv来画线. 但关键就是VS中如何配置c++ opencv库的问题: vs中opencv库的配置:htt ...

  5. 【转】HTTP缓存机制

    前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能.但是对于很多前端同 ...

  6. cas无缝单点登录(原创)

    之前一直有一个问题残绕着自己,今天,终于很粗糙的解决了这个问题. 众所周知,按照cas单点登录,默认情况下,在不登录的情况下,打开网站是必须要跳转到登录页面的.那有什么方法可以控制吗,当然有,很简单, ...

  7. python爬取当当网的书籍信息并保存到csv文件

    python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...

  8. c++ 11 bind function

    Year 2011陈 良乔C++11 FAQ std::function 和 std::bind 标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理 ...

  9. jmeter 非GUI模式下测试报错An error occurred: Unknown arg:

    D:\download\性能工具\JMeter\apache-jmeter-2.11\apache-jmeter-2.11\bin>jmeter -n -t E:\性能测试\jmeter scr ...

  10. React:快速上手(4)——掌握Redux(1)

    React:快速上手(4)——掌握Redux 引入Redux 混乱的state管理 随着 JavaScript 单页应用开发日趋复杂,JavaScript 需要管理比任何时候都要多的 state (状 ...