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这些參数的配置! 假设这些都弄好 ...
随机推荐
- Python 3 MySQL数据库操作
import pymysql class Mysql_db(): def __init__(self,ip,username,password,db_name,table_name): self.ip ...
- 使用jQuery开发tree插件
1.插件截图 2.插件使用 首先引入jquery库,然后引入tree.js.tree.css文件,如下: <script type="text/javascript" src ...
- 规格化设计——OO第三单元总结
规格化设计--OO第三单元总结 一.JML语言理论基础.应用工具链 1.1 JML语言 JML(java modeling language)是一种描述代码行为的语言,包括前置条件.副作用等等.J ...
- HTML学习摘要5
DAY 5 HTML <address> 元素定义文档或文章的联系信息(作者/拥有者). 此元素通常以斜体显示.大多数浏览器会在此元素前后添加折行. HTML <cite> 元 ...
- Linux 基础学习1
目录 Linux 基础学习 用户登录 终端 交互式接口 bash 修改ssh连接慢的步骤 命令提示符 显示提示符格式 命令 别名 命令格式 获取命令的帮助信息 man bash 快捷键 tab 键 引 ...
- stm32 USART_IT_IDLE中断 一帧数据
USART_IT_IDLE中断,是串口收到一帧数据后,发生的中断.也可以叫做一包数据 USART_IT_IDLE和USART_IT_RXNE区别 当接收到1个字节,会产生USART_IT_RXNE中断 ...
- UCOSIII消息队列
任务间消息传递2种途径 全局变量 发布消息 主结构体 typedef struct os_q OS_Q; struct os_q { /* Message Queue */ OS_OBJ_TYPE T ...
- redis 异常 MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. 解决方 ...
- Windows环境下大数据处理的构想(一)
为什么不呢?我们有了RPC/RMI和MAP,为什么不能在windows环境下处理大数据呢?windows是迄今为止最普及的操作系统,据市调公司NetMarketShare最新(2019年5月)统计数据 ...
- Android笔记(五十三) 利用有道OPENAPI做简单的翻译demo
先去 http://fanyi.youdao.com/openapi?path=data-mode 申请开发者key 有道api会自动将申请的单词翻译并返回为xml或者json格式,我们所需要做的就是 ...