Take picture and convert to Base64

后端 未结 4 1134
陌清茗
陌清茗 2020-12-14 02:24

I use code below to make a picture with camera. Instead of saving I would like to encode it to Base64 and after that pass it to another API as an input. I can\'

相关标签:
4条回答
  • 2020-12-14 02:44

    If you want your base64 String to follow the standard format, add this after getting your base64 method from any of the provided answers

    String base64 =""; //Your encoded string
    base64 = "data:image/"+getMimeType(context,profileUri)+";base64,"+base64;
    

    The method to get imageExtension is

       public static String getMimeType(Context context, Uri uri) {
            String extension;
            if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
                //If scheme is a content
                final MimeTypeMap mime = MimeTypeMap.getSingleton();
                extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uri));
            } else {
                //If scheme is a File
                //This will replace white spaces with %20 and also other special characters. This will avoid returning null values on file name with spaces and special characters.
                extension = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uri.getPath())).toString());
            }
            return extension;
        }
    
    0 讨论(0)
  • 2020-12-14 02:46

    Try this:
    ImageUri to 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);
                }
            }
    

    Encode Bitmap in 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;
        }
    

    Encode from FilePath to 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;
    
        }
    

    output:

    0 讨论(0)
  • 2020-12-14 02:49

    I've wrote my code like this :

    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("***************");
            }
        };
    }
    

    It works perfectly...

    0 讨论(0)
  • 2020-12-14 03:05

    Just for converting from bitmap to base64 string in kotlin I use:

    private fun encodeImage(bm: Bitmap): String? {
            val baos = ByteArrayOutputStream()
            bm.compress(Bitmap.CompressFormat.JPEG, 100, baos)
            val b = baos.toByteArray()
            return Base64.encodeToString(b, Base64.DEFAULT)
        }
    
    0 讨论(0)
提交回复
热议问题