ギャラリーから画像を選択し、Base64に変換してサーバーに送信します。 JPEG画像の場合、正常に動作します。同じサーバー上のギャラリーからアップロードした画像がサーバーフォルダに表示されます。しかし、モバイルギャラリーからPNG形式の画像をアップロードすると、サーバー上で同じように表示されません。代わりに、その周りに黒いエッジを作成します。私は本当に何がうまくいかないのか分からないのですか?なぜPNG形式の画像の周囲にPNGが黒いエッジを形成するのですか?
また、私の実際のイメージは、与えられたJPEGイメージと同じです。
参考画像:
JPEG:
PNG:
私はPNG形式の画像のために表示されませんBLACK国境を取り除きたいです。以下は
は私のコードスニペットは、あなたがイメージファイルをアップロードしたい
FileInputStream mFileInputStream = null;
try {
mFileInputStream = new FileInputStream(imagePathFromSDCard);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int bytesRead = 0;
while ((bytesRead = mFileInputStream.read(b)) != -1) {
bos.write(b, 0, bytesRead);
}
Bitmap bitmap = safeImageProcessing.decodeFile(uri);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
byte[] ba = bos.toByteArray();
String encodedImage = Base64.encodeToString(ba, Base64.NO_WRAP);
//this line sends image base64 to server & there i decode into original
new ImageAsync().sendImageProcess(getActivity(), encodedImage, this);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ファイルを直接base64に変換してOutOfMemory例外を取得するとクラッシュすると思います。 – VVB
いいえこれは間違いなくより少ないメモリを使用します。それは、ビットマップが最も多く占めるものです。 – greenapps
しかし、可能な限り少ないメモリを使用したい場合は、base64エンコードを開始しないでください。それで、まずmemornyのバイト配列にファイルをロードする必要はありませんが、ファイルを直接アップロードすることができます。 – greenapps