Растровое изображение в файл, который может быть загружен через асинхронный
После дня головных болей из-за предыдущих проблем, связанных с внедрением работающей системы загрузки фотографий, я чувствую себя как дома. Последний и последний шаг - разрешить пользователям загружать изображение после его обрезки.
после обрезки у меня есть доступ к растровому изображению и imageView, использующему растровое изображение. Используемое им асинхронное требование: http://loopj.com/android-async-http/
и API, который я использую, настроен таким образом, что мне нужно отправить "файл", например так:
File myFile = new File("/path/to/file.png");
RequestParams params = new RequestParams();
try {
params.put("profile_picture", myFile);
} catch(FileNotFoundException e) {}
Каковы мои варианты для превращения моего растрового изображения в "файл"
2 ответа
Вы можете сохранить Bitmap в файл, используя метод Bitmap.compress. Просто предоставьте правильный FileOutputStream в качестве аргумента.
Вы также можете загрузить изображение без использования файлов, просто сохраните его в байтовом массиве и затем загрузите как этот массив.
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 85, out);
byte[] myByteArray = out.toByteArray();
RequestParams params = new RequestParams();
params.put("profile_picture", new ByteArrayInputStream(myByteArray), "image.png");
Попробуй это:
String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() +
"/to";
File dir = new File(file_path);
if(!dir.exists)
dir.mkdirs();
File file = new File(dir, "file.png");
FileOutputStream fOut = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 85, fOut);
fOut.flush();
fOut.close();
и поместите приведенное ниже разрешение в файл манифеста.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>