图片上传,包括从相册选取与拍照上传
来源:互联网 发布:php和mysql 编辑:程序博客网 时间:2024/04/30 09:13
图片上传,包括从相册选取与拍照上传 (2011-07-18 16:12)
分类: Android
类似开心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;
}
// 拍照上传
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;
}
- 图片上传,包括从相册选取与拍照上传
- 调用系统相机拍照,从相册选取图片上传
- android从相册选取与拍照上传最终解决版
- 图片拍照上传和相册选取
- 拍照上传图片与从相册中选择图片上传
- ionic 的项目实现从手机相册选取图片或拍照并上传至服务器
- 上传图片到服务器和图片内存处理以及拍照或从相册选取图片的小总结
- 图片上传、显示网络图片、相册选取、拍照选取、图片裁剪
- [Android] WebView中拍照或从相册上传图片
- 关于Webview拍照或从相册上传图片处理总结
- MUI 拍照和从系统相册选择图片上传
- 从相册选取裁剪上传头像
- Ionic3学习笔记(十二)拍照上传图片以及从相册选择图片上传
- Android 拍照与从相册选取图片时,图片不显示的问题
- android头像相册/拍照选取,裁剪及上传综合案例
- android头像相册/拍照选取,裁剪及上传综合案例
- Hbuilder mui 相册拍照图片上传
- 利用 AFN 上传相册或拍照图片
- LG E900 手机解锁
- java.util.ConcurrentModificationException
- C# 操作WORD
- HTML5 canvas使用入门——参考资料
- GDI+中字体单位的实际意义
- 图片上传,包括从相册选取与拍照上传
- linux下静态链接库和动态链接库
- Wireshark 比较skype视频发送接收端是否有丢包
- 关于extern 与static 的一点认识
- 转载:php与java 对照
- zoj 3195(LCA应用)
- 揭秘委托与多线程使用
- Nagios飞信linux系统免费短信报警配置
- 基于 Android NDK 的学习之旅-----目录