解释全在代码中:

// 拍照上传
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. NIO开发Http服务器(2):项目结构

    最近学习了Java NIO技术,觉得不能再去写一些Hello World的学习demo了,而且也不想再像学习IO时那样编写一个控制台(或者带界面)聊天室.我们是做WEB开发的,整天围着tomcat.n ...

  2. JAVA日期格式化yyyyMMddHHmmssSSS

    String nowtime = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());

  3. iOS - 安装CocoaPods详细过程(重装系统后!)

    重装的系统,发现很多东西都要重装,顺便复习和检验下以前的方法还有没有效 一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们 ...

  4. Java 之 web服务器—Tomcat

    一.服务器 1.服务器 服务器:安装了服务器软件的计算机 2.服务器软件 服务器软件:接收用户的请求,处理请求,做出响应 3.Web 服务器软件 web 服务器软件:接收用户的请求,处理请求,做出响应 ...

  5. plsql developer中如何设置sql window显示行号

    转自:https://blog.csdn.net/qq_31302091/article/details/74931828 英文版的plsql developer中,很多时候,很多功能不去用,都不知道 ...

  6. 制作IOS ANE的基本流程

    来源:http://www.swfdiy.com/?p=1239 1. 使用xcode新建ios上的static library 工程 2. 从air sdk/include里拷贝flashrunti ...

  7. SAP Marketing Cloud功能简述(四) : 线索和客户管理

    这个系列的前三篇文章Grace Dong已经给大家带来了下面的内容: SAP Marketing Cloud功能简述(一) : Contacts和Profiles SAP Marketing Clou ...

  8. typescript_类

    //类的定义 class Animal{ id:string;//默认访问修饰符为 public : 类本身.子类.类外部可访问 public name:string; // public : 类本身 ...

  9. Python——结束语句

    条件语句: break 结束语句,表示达到某个目的后,将结束当前循环语句,break以下的代码都不执行.例如: for i in range(10): print("--------&quo ...

  10. c# DirectoryInfo类