我想使用像这样的多部分上传将已编辑的位图图像上传到服务器
multipartEntity.addPart("ProfilePic", new FileBody(file));
但我无法将位图(android.graphics.Bitmap
)图片转换为文件(java.io.File
)。
我尝试将其转换为字节数组,但它也没有用。
有没有人知道android的内置功能或任何将Bitmap转换为File的解决方案?
请帮忙......
答案 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
}
}