Android实现图片(拍照+相册)上传功能
来源:互联网 发布:用友软件银川经销处 编辑:程序博客网 时间:2024/04/28 22:27
今天给大家讲一下如何实现图片上传功能,以上所讲呢全是经验之谈,把工作中的代码以功能的形式展示出来,即为了大家学习借鉴,也为了日后工作的方便,加深理解。
图片上传,众所周知,无非是是拍照和相册选取两种,可以用dialog,activity,popwindow等展示界面,具体大家自己去实现,本文只讲功能
调取拍照功能:
private void camera() { try { tempImg1 = new File(MainActivity.this.getExternalCacheDir(), System.currentTimeMillis() + ".jpg"); if (!tempImg1.exists()) { boolean b = tempImg1.createNewFile(); if (b) { log.i(tempImg1.getAbsolutePath()); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempImg1)); startActivityForResult(intent, 1); } } } catch (IOException e) { log.e(e); } }
调取相册功能:
private void photos() { Intent getImage = new Intent(Intent.ACTION_PICK, null); getImage.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");//这是图片类型 startActivityForResult(getImage, 2); }
然后是如何在 public void onActivityResult(int requestCode, int resultCode, Intent data)里进行处理呢?
requestCode请求码,resultCode结果码,data是传递的数据
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case 1: if (tempImg1 != null) { //调用裁剪功能或者压缩 //scaleImage(Uri.fromFile(tempImg1)); } break; case 2: if (data != null) { //调用裁剪功能或者压缩 // scaleImage(data.getData()); } break; default: break; } } }
裁剪有系统的裁剪方式,也有自定义的裁剪方式
系统裁剪:
/** * 裁剪图片 */ public void startPhotoZoom(Uri uri, int size) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true");// crop=true 有这句才能出来最后的裁剪页面. intent.putExtra("aspectX", 1);// 这两项为裁剪框的比例. intent.putExtra("aspectY", 1);// x:y=1:1 intent.putExtra("outputX", size);//图片输出大小 intent.putExtra("outputY", size); intent.putExtra("output", Uri.fromFile(tempImg)); intent.putExtra("outputFormat", "jpg");// 返回格式 startActivityForResult(intent, 3); }
自定裁剪很多,这里也为大家推荐github上比较流行的几款裁剪库
https://github.com/wangchang163/uCrop
https://github.com/wangchang163/cropper
https://github.com/wangchang163/android-crop
以上都是很经典的老牌crop库,大家可以作为参考!
裁剪过后自然是保存图片,进行上传啦,上传具体参考后台接口,不做介绍了,当然还有一种情况,就是不需要裁剪,只进行压缩,因为裁剪是选取局部图片,当图片太大,又不需要裁剪时,就需要进行压缩了,这里提供一个压缩方法
private void scaleImage(Uri uri) { Bitmap bitmap = null; try { bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); int width = bitmap.getWidth(); int height = bitmap.getHeight(); if (width > 800 || height > 800) { if (width > height) { float scaleRate = (float) (800.0 / width); width = 800; height = (int) (height * scaleRate); Bitmap map = Bitmap.createScaledBitmap(bitmap, width, height, true); saveBitmap(map); } else { float scaleRate = (float) (800.0 / height); height = 800; width = (int) (width * scaleRate); Bitmap map = Bitmap.createScaledBitmap(bitmap, width, height, true); saveBitmap(map); } } else { saveBitmap(bitmap); } } catch (IOException e) { e.printStackTrace(); } } private void saveBitmap(Bitmap map) { File file = new File(getExternalCacheDir(), System.currentTimeMillis() + ".jpg"); try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); map.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); updateImg(file);//上传图片接口 } catch (Exception e) { e.printStackTrace(); } }
嗯,就这样吧,基本上可以实现此功能,仅供参考借鉴,如有帮助,请点赞,谢谢!
1 0
- Android实现图片(拍照+相册)上传功能
- Android开发:相册读取、拍照、图片裁剪和图片上传服务器等功能的实现
- Android调用Camera APIs实现拍照功能并上传图片
- Android开发:仿微信和QQ空间发说说相册读取、拍照、图片裁剪和图片上传服务器等功能的实现
- android实现图片相册功能
- Android实现拍照,以及从相册选择图片裁剪功能同时保存在本地
- android 拍照或选择相册图片压缩上传
- Android 2种图片(相册--拍照)的上传方式
- [Android] WebView中拍照或从相册上传图片
- Android开发——相册拍照_04.图片上传
- Android 拍照剪裁,获取相册图片,上传照片至服务端
- 图片拍照或相册选择的实现以及裁剪功能
- AFNetworking 上传图片 (相册、拍照,并且图片可裁剪)
- Android拍照和相册+系统裁剪功能返回图片
- 微信公众号js接口,实现图片的上传(拍照+本地相册)
- android 拍照,图库,相册,上传
- Android 实现从相册选择图片,拍照选择图片
- Android拍照或相册获取照片上传 (带图片剪裁)
- poj3349 Snowflake Snow Snowflakes之hash入门
- 蓝桥杯--移动距离
- 夯实JAVA基本之一——泛型详解(2):高级进阶
- Nssting
- CodeForces 622A Infinite Sequence
- Android实现图片(拍照+相册)上传功能
- ppp and ndis
- 一些基础博客链接
- 测试代码格式
- Android 6.0 反射 newInstance
- NSLayoutConstraint-代码实现自动布局的函数用法
- 通过寄生组合式继承创建js的异常类
- 极光推送参考文档
- redis主从服务器搭建