Android 从相机拍摄照片并解码到base64
我已经建立了我的Web服务,它将接收在base64中解码的图像 我已经写了这段代码,允许我从相机中拍摄一张照片,并将其放在ImageView中 我想拍摄这张照片并将其转换为base64字符串 有人能帮忙吗? 这是我的密码Android 从相机拍摄照片并解码到base64,android,kotlin,Android,Kotlin,我已经建立了我的Web服务,它将接收在base64中解码的图像 我已经写了这段代码,允许我从相机中拍摄一张照片,并将其放在ImageView中 我想拍摄这张照片并将其转换为base64字符串 有人能帮忙吗? 这是我的密码 class takepicActivity : AppCompatActivity() { val CAMERA_REQUEST_CODE = 0 var pic:Bitmap?=null var encoded_image:String?=null override fun
class takepicActivity : AppCompatActivity() {
val CAMERA_REQUEST_CODE = 0
var pic:Bitmap?=null
var encoded_image:String?=null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_takepic)
val id = intent.getStringExtra("id")
//click on return
findViewById<TextView>(R.id.txt_return).setOnClickListener{
val intent = Intent(applicationContext, HelloActivity::class.java)
intent.putExtra("id",id)
startActivity(intent)
finish()
}
//take the pic
val callCameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if(callCameraIntent.resolveActivity(packageManager) != null)
startActivityForResult(callCameraIntent,CAMERA_REQUEST_CODE)
}
fun BitMapToString(bitmap: Bitmap): String {
val baos = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100,baos)
val b=baos.toByteArray()
return Base64.encodeToString(b, Base64.DEFAULT)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
CAMERA_REQUEST_CODE -> {
if(resultCode == Activity.RESULT_OK && data != null){
pic_here.setImageBitmap(data.extras.get("data") as Bitmap)
}
else{val intent = Intent(applicationContext, HelloActivity::class.java)
startActivity(intent)
finish() }
}
else -> {Toast.makeText(this,"unrecognized request code", Toast.LENGTH_SHORT).show()}
}}
}
class takepicActivity:AppCompatActivity(){
val摄像机请求代码=0
变量pic:位图?=null
var编码的_图像:字符串?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_takepic)
val id=intent.getStringExtra(“id”)
//点击返回
findViewById(R.id.txt\u return).setOnClickListener{
val intent=intent(applicationContext,HelloActivity::class.java)
intent.putExtra(“id”,id)
星触觉(意图)
完成()
}
//照张相
val callCameraIntent=Intent(MediaStore.ACTION\u IMAGE\u捕获)
if(CallCameraInEvent.resolveActivity(packageManager)!=null)
startActivityForResult(调用CameraIntent、摄像头请求代码)
}
趣味位图字符串(位图:位图):字符串{
val baos=ByteArrayOutputStream()
compress(bitmap.CompressFormat.PNG,100,baos)
val b=baos.toByteArray()
返回Base64.encodeToString(b,Base64.DEFAULT)
}
重写activityResult(请求代码:Int,结果代码:Int,数据:Intent?){
super.onActivityResult(请求代码、结果代码、数据)
何时(请求代码){
摄像头\请求\代码->{
if(resultCode==Activity.RESULT\u OK&&data!=null){
pic_here.setImageBitmap(data.extras.get(“数据”)作为位图)
}
else{val intent=intent(applicationContext,HelloActivity::class.java)
星触觉(意图)
finish()}
}
else->{Toast.makeText(这是“无法识别的请求代码”,Toast.LENGTH\u SHORT.show()}
}}
}
在一个旧项目中,我做了以下工作:
public static String getEncodedFileContentBase64(final Context context, final Uri uri) {
String encoded = "";
if (context != null && uri != null) {
InputStream inputStream;
try {
String filePath = getRealPathFromURI(context, uri);
if (!TextUtils.isEmpty(filePath)) {
inputStream = BitmapUtils.getImageFile(filePath);
byte[] buffer = new byte[10 * ONE_KIO];
int bytesRead;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Base64OutputStream base64OutputStream = new Base64OutputStream(outputStream, Base64.DEFAULT);
while ((bytesRead = inputStream.read(buffer)) != -1) {
base64OutputStream.write(buffer, 0, bytesRead);
}
base64OutputStream.close();
encoded = outputStream.toString();
}
} catch (Exception e) {
LogUtils.e(TAG, "Exception when reading image file: " + e.getMessage());
}
}
return encoded;
}
希望它能帮助您尝试以下方法:
要位图的ImageUri:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
final Uri imageUri = data.getData();
final InputStream imageStream = getContentResolver().openInputStream(imageUri);
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
String encodedImage = encodeImage(selectedImage);
}
}
在base64中编码位图
private String encodeImage(Bitmap bm)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
byte[] b = baos.toByteArray();
String encImage = Base64.encodeToString(b, Base64.DEFAULT);
return encImage;
}
从FilePath编码到base64:
private String encodeImage(String path){
File imagefile = new File(path);
FileInputStream fis = null;
try{
fis = new FileInputStream(imagefile);
}catch(FileNotFoundException e){
e.printStackTrace();
}
Bitmap bm = BitmapFactory.decodeStream(fis);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
byte[] b = baos.toByteArray();
String encImage = Base64.encodeToString(b, Base64.DEFAULT);
//Base64.de
return encImage;
}