图片上传,包括从相册选取与拍照上传

news/2024/7/1 4:55:31

转自论坛,还没试

类似开心001的照片上传功能,刚做的时候搜了些例子,有的好用有的不好用,最后东拼西凑,乱七八糟的写了一个。有不对的或更好的方法希望大家指点。下面开始贴代码:两个监听事件:

// 拍照上传

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://www.cnblogs.com/jacktu/archive/2011/05/22/2053817.html


http://www.niftyadmin.cn/n/3390070.html

相关文章

.NET连接SAP系统专题:C#获取RFC中自定义的异常(四)

有的时候我们需要在RFC中抛出一些自定义的异常,比如输入一个不存在的品号,我们需要抛出一个异常,告知用户品号不存在。有一个笨笨的做法就是通过返回值来判断,但是这样不灵活,同时也会因为品号不存在而继续之行RFC。如…

Ksoap2调.Net Web Services 关于参数的一点的小问题

自己对于Ksoap2和Web Services都没有过深入的研究,只是最近遇到从Android客户端调用Web Services的需求。在使用过程中遇到了一些小问题,这里mark一下。 KSOAP2就不多说了,Google它主页吧第一个,intro、doc都有啊(惯例…

git for windows下载

由于git for windows官网在国外,下载特别慢。 这里分享一个国内的镜像,速度很快。 https://npm.taobao.org/mirrors/git-for-windows/ 拿去吧,不用血。

Python 1-17 元组

Python 1-17 元组 class tuple([iterable])tuple 是一个不可变的序列类型。 >>> s abc >>> l [1,2] >>> t 1,2 >>> d dict(a1,b2) >>> set {a,b}1、元组创建 >>> tup () # 创建空元组 >>> tup1 (1, …

学习委员工作总结

工作总结 辞别盛夏,伴着金秋的碎步,走进了郑州大学的校园。这是一个陌生的环境,这是一个新的起点,这又是一个奋斗历程的开始。回望近一年的学习生活,有收获,有喜悦在这一年的工作和学习中,我的处…

insight-6.8调试工具安装

错误信息: qiangLinuxSir:~$ sudo arm-elf-insight Tk_Init failed: Cant find a usable tk.tcl in the following directories: /usr/local/share/tk8.4 /usr/local/lib/tk8.4 /usr/lib/tk8.4 /usr/local/library /usr/library /usr/tk8.4.1/library /tk8.4…

技术成就梦想【我与51CTO的故事】

最初与51CTO结缘是在2009年的年初,我搜索一篇关于exchange 2003 OWA更改密码的文章,这一搜不当紧,搜了一个技术大牛出来,而这个技术大牛就是当时我们学校的陈宣宋老师,而我们的陈老师竟然是在51CTO上写博客&#xff0c…

Ubuntu下编译insight错误解决

错误: cc1: warnings being treated as errors .././gdb/cli/cli-cmds.c: In function ‘pwd_command’: .././gdb/cli/cli-cmds.c:323: error: ignoring return value of ‘getcwd’, declared with attribute warn_unused_result make[2]: *** [cli-cmds.o] 错误…