android项目拍照功能,Android 拍照功能的开发

最近在Android上做了拍照功能的开发。

业务场景是:点击界面(HTML5)上的拍照按钮会调用拍照的JS API,获取其返回照片文件的存储路径、扩展名以及照片文件的Base64字符串,然后在界面上显示图片。

开发时一些要点记录如下:

1、关于存储:虽然现在大部分手机的存储都是有的,安全起见,需要判断一下存储的状态。

String SDState = Environment.getExternalStorageState();

if (SDState.equals(Environment.MEDIA_MOUNTED)) {

//TODO...

} else {

error("该终端没有存储设备,不能使用拍照功能...");

}

2、如何将拍摄到的照片保存到存储中,而不只是生成一份缩略图数据返回。

需要在Intent中预先指定照片文件的存储Uri。

private static final int ACTION_TAKE_PHOTO = 1;

private Uri photoUri;

/***

* 需要说明一下,以下操作使用照相机拍照,拍照后的图片会存放在相册中的

* 这里使用的这种方式有一个好处就是获取的图片是拍照后的原图

* 如果不实用ContentValues存放照片路径的话,拍照后获取的图片为缩略图不清晰

*/

ContentValues values = new ContentValues();

photoUri = this.context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);

startActivityForResult(intent, ACTION_TAKE_PHOTO);

3、如何获取图片的存储路径,以字符串的形式返回:

private Uri photoUri;

private String photoPath;

String[] pojo = {MediaStore.Images.Media.DATA};

cursor = this.context.managedQuery(photoUri, pojo, null, null,null);

if (null != cursor) {

int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);

cursor.moveToFirst();

photoPath = cursor.getString(columnIndex);

}

路径获取到了,扩展名当然不在话下了。

4、如何从Uri获取到图片的Bitmap对象:

private Uri photoUri;

byte[] photoContent = readStream(this.context.getContentResolver().openInputStream(Uri.parse(photoUri.toString())));

Bitmap photoBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

5、如何对Bitmap进行压缩,例如压缩到原有大小的四分之一:

/**

* 缩小返回图片的尺寸

* @param bitmap

*/

private Bitmap resizeBitmap(Bitmap bitmap) {

Bitmap bitmapOrigin = bitmap;

int widthOrigin = bitmapOrigin.getWidth();

int heightOrigin = bitmapOrigin.getHeight();

Matrix matrix = new Matrix();

matrix.postScale(0.25f, 0.25f);

Bitmap bitmapResized = Bitmap.createBitmap(bitmapOrigin, 0, 0, widthOrigin, heightOrigin, matrix, true);

return bitmapResized;

}

6、如何将Bitmap转为Base64字符串:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

bitmapResized.compress(Bitmap.CompressFormat.JPEG, 100, baos);

byte[] data = baos.toByteArray();

baos.close();

return new String(Base64.encodeBase64(data), "utf-8");

7、如何在HTML页面上显示Base64数据格式的图片:

首先界面上要有一个img标记,src属性置为空。

然后用js将获取到Base64图片数据放置到img标记的src属性中。

var extension = ...;//图片扩展名

var base64 = ...;//Base64数据

$("#resultImage").attr("src", "data:image/" + extension + ";base64," + base64.toString());

欢迎指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值