преобразовать android.graphics.Bitmap в java.io.File

Я хочу загрузить отредактированное растровое изображение на сервер, используя многокомпонентную загрузку следующим образом:

multipartEntity.addPart("ProfilePic", new FileBody(file));

Но я не могу преобразовать изображение Bitmap(android.graphics.Bitmap) в файл(java.io.File).

Я попытался преобразовать его в массив байтов, но это также не сработало.

Кто-нибудь знает встроенную функцию Android или какое-либо решение для преобразования растрового изображения в файл?

Пожалуйста помоги...


person Krunal Panchal    schedule 01.04.2014    source источник


Ответы (2)


Это должно сделать это:

private static void persistImage(Bitmap bitmap, String name) {
  File filesDir = getAppContext().getFilesDir();
  File imageFile = new File(filesDir, name + ".jpg");

  OutputStream os;
  try {
    os = new FileOutputStream(imageFile);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
    os.flush();
    os.close();
  } catch (Exception e) {
    Log.e(getClass().getSimpleName(), "Error writing bitmap", e);
  }
}

Измените Bitmap.CompressFormat и расширение в соответствии с вашими целями.

person Saran    schedule 01.04.2014
comment
Большое спасибо за это. Мне нужно было загрузить изображение, захваченное как поток приложений/октетов, используя Retrofit, и ваш код сработал. +1 - person f123; 02.05.2016

Хотя выбранный ответ правильный, но для тех, кто ищет код Kotlin. Здесь я уже писал подробную статью на эту тему как для Java, так и для Kotlin. Преобразование растрового изображения в файл в Android.

fun bitmapToFile(bitmap: Bitmap, fileNameToSave: String): File? { // File name like "image.png"
        //create a file to write bitmap data
        var file: File? = null
        return try {
            file = File(Environment.getExternalStorageDirectory().toString() + File.separator + fileNameToSave)
            file.createNewFile()

            //Convert bitmap to byte array
            val bos = ByteArrayOutputStream()
            bitmap.compress(Bitmap.CompressFormat.PNG, 0, bos) // YOU can also save it in JPEG
            val bitmapdata = bos.toByteArray()

            //write the bytes in file
            val fos = FileOutputStream(file)
            fos.write(bitmapdata)
            fos.flush()
            fos.close()
            file
        } catch (e: Exception) {
            e.printStackTrace()
            file // it will return null
        }
    }
person Asad Ali Choudhry    schedule 22.06.2020