Tome la imagen y convertir a Base64
Utilizo el código abajo para hacer una imagen con la cámara. En lugar de guardar me gustaría codificarlo a Base64
y después de pasarlo a otra API como una entrada. No puedo ver el método, cómo modificar el código para tomar imágenes en Base64
en lugar de archivos regulares.
public class CameraDemoActivity extends Activity { int TAKE_PHOTO_CODE = 0; public static int count = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/"; File newdir = new File(dir); newdir.mkdirs(); Button capture = (Button) findViewById(R.id.btnCapture); capture.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { count++; String file = dir+count+".jpg"; File newfile = new File(file); try { newfile.createNewFile(); } catch (IOException e) { } Uri outputFileUri = Uri.fromFile(newfile); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(cameraIntent, TAKE_PHOTO_CODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) { Log.d("CameraDemo", "Pic saved"); } } }
Intento usar el código de abajo para convertir una imagen a Base64
.
- Java Android - volley library - obtener un mapa de bits a través de ImageLoader
- Bitmap comprimido con calidad = 100 tamaño de archivo mayor que original
- Cómo convertir todo el contenido en una vista de desplazamiento a un mapa de bits?
- Mat to Bitmap en el archivo jni cpp de Android
- ImageView: recicla automáticamente el mapa de bits si ImageView no está visible (dentro de ScrollView)
public static String encodeToBase64(Bitmap image, Bitmap.CompressFormat compressFormat, int quality) { ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream(); image.compress(compressFormat, quality, byteArrayOS); return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT); }
Arriba se describe debe ser una manera mucho más directa y más fácil que guardar la imagen y después de que busca la imagen para codificar.
- Android arrastrar y soltar / rotar mapa de bits en lienzo
- OnPreviewFrame data image to imageView
- Java.lang.OutOfMemoryError: tamaño de mapa de bits supera el presupuesto de VM en ListView y imágenes de carga perezosa
- Evitar que el bitmap sea un android reciclado
- Android: Obtención de un mapa de bits desde una conexión de url (graph.facebook.com) que redirige a otra url
- Obtener coordenadas de una imagen de mapa de bits de un ImageView dos veces más pequeño
- Java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset ()
- Cómo comprimir Bitmap como JPEG con la pérdida de calidad al menos en Android?
Prueba esto:
ImageUri a Bitmap:
@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); } }
Codificar mapa de bits en 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; }
Codificar de FilePath a 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; }
salida:
He escrito mi código de esta manera:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Camera mCamera = Camera.open(); mCamera.startPreview();// I don't know why I added that, // but without it doesn't work... :D mCamera.takePicture(null, null, mPicture); } private Camera.PictureCallback mPicture = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { System.out.println("***************"); System.out.println(Base64.encodeToString(data, Base64.DEFAULT)); System.out.println("***************"); } }; }
Funciona perfectamente …