【发布时间】:2022-01-01 08:23:42
【问题描述】:
我有两个用于拍照的按钮,我想将照片转换为 base64 以将它们发送到我的数据库,但是使用位图会大大降低照片的质量,我怎样才能获得全尺寸的照片和将其转换为不带位图的base64?,或者有什么方法可以使用位图获得高质量的照片。
您可以将照片保存在临时目录中以获取完整尺寸的照片。
ImageView imageV, imageV2;
Button btn, btn2;
static final int IMAGE_REQUEST = 1;
static final int IMAGE_REQUEST2 = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageV = findViewById(R.id.image_view);
imageV2 = findViewById(R.id.image_view_2);
btn = findViewById(R.id.button);
btn2 = findViewById(R.id.button2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent takePhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (camara.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePhoto, IMAGE_REQUEST);
}
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent takePhoto2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (camara.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePhoto2, IMAGE_REQUEST);
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == IMAGE_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap photo = (Bitmap) extras.get("data");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
byte[] image = outputStream.toByteArray();
String imageB64 = Base64.encodeToString(image, Base64.DEFAULT);
}
}
if (requestCode == IMAGE_REQUEST2) {
if (resultCode == Activity.RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap photo2 = (Bitmap) extras.get("data");
ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
photoStatement.compress(Bitmap.CompressFormat.JPEG, 100, outputStream2);
byte[] imagen2 = outputStream2.toByteArray();
String image2B64 = Base64.encodeToString(imagen2, Base64.DEFAULT);
}
}
}
【问题讨论】:
-
在尝试将全分辨率照片转换为 base64 时,您很有可能会耗尽内存。您可能无法将全分辨率照片加载为
byte[],更不用说进行转换了。
标签: android base64 android-camera