android.hardware.Camera
APIを使用して写真を撮ります。次に、それを実際のサイズの半分のビットマップに変換し、JPEGの品質80に圧縮し、Base64
に変換し、次のようにサーバーに送信します。Base64でサーバーに大きな画像をアップロード
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
String encoded = Base64.encodeToString(byteArray, Base64.NO_WRAP);
String json_response = "";
try {
URL url = new URL("https://example.com/api_endpoint");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write("?reg=" + regCode);
writer.write("&img=" + encoded);
writer.flush();
writer.close();
os.close();
Log.d("Auth", conn.getResponseCode() + "");
InputStreamReader in = new InputStreamReader(conn.getInputStream());
BufferedReader br = new BufferedReader(in);
String text = "";
while ((text = br.readLine()) != null) {
json_response += text;
}
conn.disconnect();
} catch (IOException e) {
Log.d(getClass().getName(), "" + e.getMessage());
}
期待どおりに動作します。今、画像のサイズを変更せずに品質を100%に保っていない場合、どうすればOutOfMemoryError
を避けることができますか?私のアプリケーションでは、イメージが完全な解像度と最高品質で表示される必要があります。
私の質問は以下のとおりです。
- は、私は正しい道をアップロードしています方法は何ですか?
- 送信方法画像は
OutOfMemoryError
なしで最高の品質です。つまり、このプロセスでRAMの使用を最適化する方法はありますか?
男性は他の賢明なあなたのアプリのサイズを変更し、このことができます...私に教えてくださいクラッシュする。 Base64で変換する前にそれをサイズ変更 –
こんにちは!ありがとうございますが、それは私がすでにやったことです。今私はサイズ変更せずに転送する必要があります。 –
それからクラッシュする可能性が90%を超えたり、写真がアップロードに時間がかかることがあります。 –