我从图库中选择图像,转换为Base64并发送到服务器。对于JPEG图像,它工作正常;我从服务器上的库上传的图像同样显示在服务器文件夹中。但是,当我从移动图库上传PNG格式图像时,它在服务器上显示不同;相反,它会在它周围创建黑色边缘。我真的不知道出了什么问题?
另外,我的实际图像与给定的JPEG图像相同。
参考图片:
JPEG:
PNG:
我只是想摆脱不应出现在PNG格式图像上的黑色边框。
以下是我的代码段
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();
}
答案 0 :(得分:0)
您想要上传图片文件。但是你首先使用BitmapFactory来制作一个Bitmap。然后将位图压缩为jpg或png字节数组。之后,您将base64编码为您上传的字符串。
真是个好消息。你已经改变了文件。取消中间位图。
而是直接在字节数组中加载文件。然后像往常一样继续使用字节数组。
我说我认为base64首先编码文件的字节是一个坏主意,因为它增加了必须以30%传输的字节数。