将android.graphics.Bitmap转换为java.io.File

时间:2014-04-01 11:34:06

标签: android android-bitmap

我想使用像这样的多部分上传将已编辑的位图图像上传到服务器

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

但我无法将位图android.graphics.Bitmap)图片转换为文件java.io.File)。

我尝试将其转换为字节数组,但它也没有用。

有没有人知道android的内置功能或任何将Bitmap转换为File的解决方案?

请帮忙......

2 个答案:

答案 0 :(得分:26)

这应该这样做:

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和扩展名以符合您的目的。

答案 1 :(得分:0)

尽管选择的答案是正确的,但是对于那些正在寻找Kotlin代码的人来说。在这里,我已经针对Java和Kotlin撰写了有关该主题的详细文章。 Convert Bitmap to File in 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
        }
    }