Android App自定义拍照

随着android软硬件的不断升级,目前主流的android手机拍照功能非常强大,尤其是分辨率不断提高,一张照片下来得3-6M。但是在有些场景下,其实不需要那么高清的图片,需要600*480甚至更小,而且图片小,传输快,对于服务端的存储压力也小。目前我所在的项目就有这样的需求,需要上传一些BUG图片到服务器。目前这些图片都是屏幕截图和手机自带相机拍摄,太大了,都是3-6M。如果直接将3-6M的图片压缩到300K左右,图片就看不清了。于是计划采用自定义相机进行拍照。

  
第一步:定义一个SurfaceView
SurfaceView surfaceView = (SurfaceView) this .findViewById(R.id.surfaceView);
surfaceView.getHolder() .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// 设置分辨率
surfaceView.getHolder().setFixedSize(320, 240); surfaceView.getHolder().addCallback(new SurfaceCallback());

注:在有些android手机上surfaceView.getHolder().setFixedSize(320, 240);无效,需要在第二步设置图片尺寸

第二步:在serfaceView回调里设置camera参数
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewFrameRate(5); //每秒5帧
//设置照片的输出格式
parameters.setPictureFormat(PixelFormat.JPEG);
//照片质量
parameters.set(“jpeg-quality”, 100);
int width = 640;
int height = 480;
parameters.setPictureSize(width, height); //设置图片尺寸

注:在设置图片尺寸的时候,width和height必须是设备支持的尺寸,否则会黑屏。如果希望拍摄尽可能小的图片可以通过下面的代码获取设备支持的尺寸列表,从中取最小的尺寸。
这里写图片描述

第三步:聚焦
camera.autoFocus(null);
拍照前,必须要主动聚焦。这一步很重要,要不然图片是模糊的

第四步:拍照
camera.takePicture(null, null, new TakePictureCallback()); // 拍照

第五步:获取图片并保存

这里写图片描述

总结:通过这样自定义拍照,在andorid手机上拍摄的清晰照片可以缩小的几十K。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值