解释全在代码中:

// 拍照上传
private OnClickListener mUploadClickListener = new OnClickListener() { public void onClick(View v) { // 调用相机 Intent mIntent = new Intent("android.media.action.IMAGE_CAPTURE"); // 图片存储路径,可自定义 File tmpFile = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg"); // 获取这个图片的URI originalUri = Uri.fromFile(tmpFile);//这是个实例变量,方便下面获取图片的时候用 mIntent.putExtra(MediaStore.EXTRA_OUTPUT, originalUri); startActivityForResult(mIntent, ACTIVITY_IMAGE_CAPTURE); } }; // 打开相册 private OnClickListener mPicListClickListener = new OnClickListener() { public void onClick(View v) { // 调用相册 Intent mIntent= new Intent(Intent.ACTION_GET_CONTENT); mIntent.addCategory(Intent.CATEGORY_OPENABLE); mIntent.setType(MIME_TYPE_IMAGE_JPEG); startActivityForResult(mIntent, ACTIVITY_GET_IMAGE); } }; 监听事件写好了,怎么调用不用我说了吧。这是个startActivityForResult事件,对应的我们肯定得有个onActivityResult,贴之 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) { return; } Bitmap bm = null; ContentResolver resolver = getContentResolver(); String filePath = "/sdcard/bengxin/bx_upload_tmp.jpg";//这个是暂存图片的路径 FileOutputStream output = null; try { // 创建暂存图片 if (Utils.CreateFile(filePath)) { output = new FileOutputStream(filePath); } else { throw new Exception("内部错误"); } if (requestCode == ACTIVITY_GET_IMAGE) { // 获得图片的uri originalUri = data.getData(); PS:拍照的那个URI我们在上面已经获取了 } /**** 获取图片开始 ****/ //mContent是上传的图片byte[]数组,得到这个后随便怎么处理,当然你也可以直接用fileInput流 fileInput = (FileInputStream) resolver.openInputStream(Uri .parse(originalUri.toString())); // 将图片内容解析成字节数组 mContent = getBytesFromInputStream(fileInput, 3500000); fileInput.close(); // 将字节数组转换为ImageView可调用的Bitmap对象 bm = getPicFromBytes(mContent, null); /********* 获取图片完了 ************/ // 将图片缩小到指定比例并且保存到缓存文件 float scale = ((float) 210) / ((float) bm.getWidth()); bm = Utils.smallBmp(bm, scale);//这个缩小功能是自己写的方法 //将Bitmap读到文件中去,注意这个是压缩,那个100是压缩比,0-100,越大质量越好 bm.compress(CompressFormat.JPEG, 100, output); output.flush(); output.close(); /*********为了更快速的将图片上传,将缩小后的图片保存到暂存文件***************/ fileInput = new FileInputStream(filePath); // 将图片内容解析成字节数组 mContent = getBytesFromInputStream(fileInput, 3500000); fileInput.close(); /*********************/ // 预览一下你的图片吧 bm = bm.createScaledBitmap(bm, mButtomUpload.getWidth() - 10, mButtomUpload.getHeight() - 10, true); mButtomUpload.setImageBitmap(bm); mButtomUpload.setPadding(2, 2, 2, 2); } catch (Exception e) { Utils.exceptionShow(CheckIn.this, e.getMessage()); } } 附赠两个方法,一个将字节转换成bitmap,一个获取byte[]数组 private static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) { if (bytes != null) if (opts != null) return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts); else return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); return null; } private static byte[] getBytesFromInputStream(InputStream is, int bufsiz) throws IOException { int total = 0; byte[] bytes = new byte[4096]; ByteBuffer bb = ByteBuffer.allocate(bufsiz); while (true) { int read = is.read(bytes); if (read == -1) break; bb.put(bytes, 0, read); total += read; } byte[] content = new byte[total]; bb.flip(); bb.get(content, 0, total); return content; }

转自https://blog.csdn.net/tao0001/article/details/7993007

Android 照片上传的更多相关文章

  1. Android实现批量照片上传至server,拍照或者从相冊选择

    近期因为项目需求,须要完毕批量照片上传,折腾了一段时间,最终完毕了,达到了例如以下效果 主界面主要有GridView组成和button组成,当按下一个格点时,会调用相机或者相冊,拍照或者选择相冊照片, ...

  2. 【Android群英传】学习笔记(一)

    本系列博客为笔者在学习<Android群英传>的学习总结 Android相关工具镜像连接:http://www.androiddevtools.cn/ Dalvik与ART Dalvik包 ...

  3. 用C#缩小照片上传到各种空间

    中秋到了,首先祝各位猿友节日快乐!!! 本博文的原名称是“跟我一起用C#压缩照片上传到各种空间”,评论上有人开骂,没办法我这人就是自信霸气,但是既然有人提出来我还是改掉吧,如果文章写得不好的地方欢迎大 ...

  4. Android开发(二十五)——Android上传文件至七牛

    设置头像: Drawable drawable = new BitmapDrawable(dBitmap); //Drawable drawable = Drawable.createFromPath ...

  5. android上传文件到服务器

    package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; i ...

  6. 【经验记录】Android上传文件到服务器

    Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...

  7. Android上传文件到服务器(转)

    Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...

  8. android -上传文件到服务器

    android上传文件到服务器       重点:最好是设置好content-type这些参数的配置!     package com.spring.sky.image.upload.network; ...

  9. android 上传文件

    android对于上传文件,还是非常easy的,和java里面的上传都是一样的,基本上都是熟悉操作输出流和输入流!另一个特别重要的就是须要一些content-type这些參数的配置!  假设这些都弄好 ...

随机推荐

  1. Process.Start cmd 参数空格问题解决

    Process.Start("cmd.exe", "/c start  \"title\"  \"C:\\Program Files\\a. ...

  2. 实现负载均衡的小demo

    首先我们先来了解负载均衡: 负载均衡是为了缓解网络压力的,服务器端进行扩容的重要手段 实现有两种方式:硬件F5    .   软件nginx.Dubbo 为了实现负载均衡的原理,我们基于以下两篇随笔继 ...

  3. 【BZOJ 2351】Matrix(Hash)

    题目链接 二维\(Hash\)类似二维前缀和,每一行看成一个\(h\)进制数,每一个以(1,1)为左上角的矩阵看成一个由每一行的\(Hash\)值组成的\(l\)进制数. 然后自己推推柿子就行. #i ...

  4. BUAAOO-Final-Summary

    目录 总结本单元两次作业的架构设计 总结自己在四个单元中架构设计及OO方法理解的演进 总结自己在四个单元中测试理解与实践的演进 总结自己的课程收获 立足于自己的体会给课程提三个具体改进建议 两次架构设 ...

  5. PHP 常用数据库操作

    1.建立与数据库服务器的连接(前提数据库服务器必须打开) 第一个参数:本地地址 第二个参数:数据库账户 第三个参数:数据库密码 第四个参数:数据库名称 $connection = mysqli_con ...

  6. jQuery.each的function中有哪些参数

    1.没有参数 $("img").each(function(){ $(this).toggleClass("example"); }); 2.有一个参数,这个参 ...

  7. cookie遇到java.lang.IllegalArgumentException: Control character in cookie value or attribute

    java.lang.IllegalArgumentException: Control character in cookie value or attribute. 该异常说明cookie中的val ...

  8. error: unknown filesystem; grub rescue

    我的电脑是win10+ubumtu双系统 在一次windows更新之后,系统无法进入win10和linux系统,出现如图错误 解决方案1: 大部分中文博客的解决方案:这里有个更加详细的: https: ...

  9. @ConfigurationProperties注解和@Value注解的区别

    都是读取配置文件属性 1.  @ConfigurationProperties(prefix = "person")读取多个属性 @Component @Configuration ...

  10. 【转】MCU厂商简介

    国内MCU市场已达360亿元,2020年将超500亿元.2016年,国内MCU市场已达360亿元,同比增长达11%,而据IC Insights预测,随着中国大陆汽车电子和物联网领域的快速发展,对MCU ...