Android 照片上传
解释全在代码中:
// 拍照上传
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 照片上传的更多相关文章
- Android实现批量照片上传至server,拍照或者从相冊选择
近期因为项目需求,须要完毕批量照片上传,折腾了一段时间,最终完毕了,达到了例如以下效果 主界面主要有GridView组成和button组成,当按下一个格点时,会调用相机或者相冊,拍照或者选择相冊照片, ...
- 【Android群英传】学习笔记(一)
本系列博客为笔者在学习<Android群英传>的学习总结 Android相关工具镜像连接:http://www.androiddevtools.cn/ Dalvik与ART Dalvik包 ...
- 用C#缩小照片上传到各种空间
中秋到了,首先祝各位猿友节日快乐!!! 本博文的原名称是“跟我一起用C#压缩照片上传到各种空间”,评论上有人开骂,没办法我这人就是自信霸气,但是既然有人提出来我还是改掉吧,如果文章写得不好的地方欢迎大 ...
- Android开发(二十五)——Android上传文件至七牛
设置头像: Drawable drawable = new BitmapDrawable(dBitmap); //Drawable drawable = Drawable.createFromPath ...
- android上传文件到服务器
package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; i ...
- 【经验记录】Android上传文件到服务器
Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...
- Android上传文件到服务器(转)
Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...
- android -上传文件到服务器
android上传文件到服务器 重点:最好是设置好content-type这些参数的配置! package com.spring.sky.image.upload.network; ...
- android 上传文件
android对于上传文件,还是非常easy的,和java里面的上传都是一样的,基本上都是熟悉操作输出流和输入流!另一个特别重要的就是须要一些content-type这些參数的配置! 假设这些都弄好 ...
随机推荐
- 【洛谷 P3224】 [HNOI2012]永无乡(Splay,启发式合并)
题目链接 启发式合并就是暴力合并把小的合并到大的里,一个一个插进去. 并查集维护连通性,同时保证并查集的根就是所在Splay的根,这样能省去很多操作. #include <cstdio> ...
- Django:web认识,jinja2模块,如何安装Django
一内容概要 1.HTTP协议 1.1简介 超文本传输协议(英文:Hyper Text Transfer Protocol,HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是 ...
- [C#(WinForm)]判断第一次启动程序
来源:https://bbs.csdn.net/topics/220023353/(10楼) 在判断窗口上添加: string strIsFirstRun = "false"; b ...
- Python学习日记(二十二) 初识面向对象
引子 假设我们要开发一个关于飞机大战的游戏,那么游戏的里面就会有两个角色,分别是属于玩家操控的战机和敌方的战机,并且两个战机都有不同的技能或攻击方式,现在我们用自己目前所学的去写出下面的这些代码: d ...
- MySQL Lock--MySQL加锁学习1
准备测试数据: ## 开启InnoDB Monitor SET GLOBAL innodb_status_output=ON; SET GLOBAL innodb_status_output_lock ...
- kafka原理与组件
一.什么是kafkakafka的目标是实现一个为处理实时数据提供一个统一.高吞吐.低延迟的平台.是分布式发布-订阅消息系统,是一个分布式的,可划分的,冗余备份的持久性的日志服务.Kafka使用场景:1 ...
- 绘图 Matplotlib Numpy Pandas
丈夫气力全,一个拟当千.猛气冲心出,视死亦如眠. 绘图 Matplotlib可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法. 能将数据进行可视化,更直观的呈现使数据更 ...
- vi / vim 字符替换详解
:s/idoxu/isTester.com/g 替换当前行所有 idoxu 为 isTester.com :n,$s/idoxu/isTester.com/ #替换第 n 行开始到最后一行中每一行的第 ...
- spring DefaultListableBeanFactory 概述
有人说,DefaultListableBeanFactory是spring的发动机,其实重要性不为过.TA的整体类图如下: 这里先概述接口部分: BeanFact ...
- HihoCoder1236 Scores
Scores 求五维偏序(≤).强制在线. \(n,q\le 50000\) 烂大街的题解 考虑如果我们能用bitset找到每一维有哪些比询问点小,然后把每一维的结果取交集,得到的就是答案了. 然后对 ...