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

6
我希望使用类似于多部分上传的方式将编辑过的位图图像上传到服务器,如下所示:
multipartEntity.addPart("ProfilePic", new FileBody(file));

但我无法将 Bitmapandroid.graphics.Bitmap)图像转换为 Filejava.io.File)。

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

有人知道安卓内置的函数或任何解决方案来将Bitmap转换为File吗?

请帮忙....


https://dev59.com/4Gsz5IYBdhLWcg3wn5RP - Palejandro
https://dev59.com/W2gu5IYBdhLWcg3wgXS5 - Ewald
2个回答

27
这应该可以做到:
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和扩展名以适应您的需求。


非常感谢您的帮助。我需要使用Retrofit上传以application/octet-stream格式捕获的图像,而您的代码起到了很好的作用。加一! - f123

1
尽管所选答案是正确的,但对于那些正在寻找Kotlin代码的人来说。在这里,我已经为Java和Kotlin编写了一篇详细的文章,涵盖了该主题。将Bitmap转换为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
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接