安卓调用系统相机拍照,并把图片保存到SD卡中 进行 尺寸和质量的压缩
来源:互联网 发布:无损音乐下载网站知乎 编辑:程序博客网 时间:2024/05/17 22:08
1.今天总结了一下安卓调用系统相机拍照,并把图片保存到SD卡中 进行 尺寸和质量的压缩的问题,顺便整理了一下自己的思路。
解决办法:
(1)调取系统相机,并指定url路径
Intent intent = newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(getPhotopath()))); startActivityForResult(intent, 1);
/** * 获取原图片存储路径 * * @return */private String getPhotopath() { // 照片全路径 // 文件夹路径 String pathUrl = Environment.getExternalStorageDirectory() + "/mymyss/"; // String imageName = "imageTest.jpg"; File file = new File(pathUrl); if (!file.exists()) { file.mkdirs(); } fileName = pathUrl + System.currentTimeMillis() + ".jpg"; // fileName = pathUrl + imageName; Log.d("fileName",fileName+"---"); return fileName;}
static String fileName = "";//为什么要定义成静态的 因为有些手机在拍照后 acvitity会重新创建 oncreate方法(2)接收处理拍照结果
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d("resultCode",resultCode+","+requestCode); if(requestCode==1) { Log.d("fileName",fileName+"-12--"); if (!fileName.equals("")) { getimage(fileName); Toast.makeText(getApplicationContext(),"图片压缩成功",Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(),"图片空",Toast.LENGTH_SHORT).show(); } } }(3)先进行尺寸压缩 ,在进行质量压缩
/** * 图片按比例大小压缩方法 * * @param srcPath (根据路径获取图片并压缩) * @return */public Bitmap getimage(String srcPath) { BitmapFactory.Options newOpts = new BitmapFactory.Options(); // 开始读入图片,此时把options.inJustDecodeBounds 设回true了 newOpts.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此时返回bm为空 newOpts.inJustDecodeBounds = false; int w = newOpts.outWidth; int h = newOpts.outHeight; // 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为 float hh = this.h;// 这里设置高度为800f float ww = this.w;// 这里设置宽度为480f // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可 int be = 1;// be=1表示不缩放 if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放 be = (int) (newOpts.outWidth / ww); // be=Math.round((float) w / (float) ww); } else if (w < h && h > hh) {// 如果高度高的话根据宽度固定大小缩放 be = (int) (newOpts.outHeight / hh); // be=Math.round((float) h / (float) hh); } if (be <= 0) be = 1; newOpts.inSampleSize = be;// 设置缩放比例 // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了 bitmap = BitmapFactory.decodeFile(srcPath, newOpts); return compressImage(bitmap,fileName);// 压缩好比例大小后再进行质量压缩}/** * 质量压缩方法 * * @param srcPath (根据路径获取图片并压缩) * @return */public Bitmap compressImage(Bitmap bitmap,String path) {// File file = null;// Bitmap bitmap = BitmapFactory.decodeFile(path);//读取路径下的图片 ByteArrayOutputStream baos = new ByteArrayOutputStream();//获取图像全质量的输出流 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); int options = 90; while (baos.toByteArray().length/1024>400)//如果质量大于400kB 就不断的压缩 { baos.reset(); // 重置baos即清空baos bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中 options -= 10;// 每次都减少10 } try { file = new File(path);//文件形式获取图片 FileOutputStream out = new FileOutputStream(file);//文件输入流// if (bitmap.compress(Bitmap.CompressFormat.JPEG, options, out)){//把数据写入文件的质量是百分之10 out.write(baos.toByteArray()); out.flush();//清空缓存区 out.close();//关闭流 // } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }调用以上方法后,在看下SD卡中的图片 是不是尺寸和质量都被压缩了
0 0
- 安卓调用系统相机拍照,并把图片保存到SD卡中 进行 尺寸和质量的压缩
- Android调用相机拍照,压缩图片后保存SD卡中
- android 调用系统相机拍照,并保存到SD卡
- Android调用系统相机拍照、裁剪,并保存到手机SD卡中,展示到界面
- Android调用系统相机拍照并保存到SD卡的两种实现方式
- 完美调用系统相机拍照,获取图片进行压缩并本地保存
- 调用系统相机拍照 并保存进SD卡
- 简单的调用系统摄像头和相机保存到Sd卡的Demo
- Android调用自身相机拍照并保存拍摄的照片到手机的sd卡
- Android调用自身相机拍照并保存拍摄的照片到手机的sd卡
- 调用系统相机进行拍照并保存
- android调用系统相机和相册进行拍照裁剪处理,解决不同安卓版本存在无法加载相册的问题,处理了是否有sd卡的存在的情况
- Android调用系统相机拍照、从相册中取照片,裁剪,并保存到手机SD卡中,展示到界面
- 调用系统相机拍照片保存到指定的路径
- 关于使用安卓系统自带的相机进行拍照,把照片存到系统图库gallery中
- 安卓图片终极压缩 尺寸和质量
- 安卓图片的压缩,尺寸,质量,采样率和微信压缩
- Android 调用系统相机进行拍照 使用自带的图片选择器和裁剪工具
- 两步打造华丽丽的Android引导页(用到RxJava)
- Android工程中添加图片资源
- 常用的正则表达式 js工具类
- Gradle配置打包设置不同域名
- iOS Crash 类型
- 安卓调用系统相机拍照,并把图片保存到SD卡中 进行 尺寸和质量的压缩
- java项目中普遍存在的一个bug,用户直接可以通过url访问本人没有权限的页面
- 关于oracle的ORA-00607和ORA-00600错误解决方法
- python 文件读写时用open还是codecs.open
- 23.Mediator-中介者模式
- X-code不联想,类库无法查看解决办法
- C++11 毫秒时间
- VirtualBox(启动失败:intel_rapl no valid rapl domains found in package 0 error VirtualBox)
- 24.Interpreter-解释器模式