Android 为什么PNG在PNG格式的图像周围形成黑色边缘?
我从gallery中选择图像,将其转换为Base64并发送到服务器。对于JPEG图像,它工作良好;我从服务器上的gallery上传的图像将显示在服务器文件夹中。然而,当我从手机图库上传PNG格式的图片时,它在服务器上并没有显示相同的内容;相反,它会在其周围创建黑色边。我真的不知道怎么了 此外,我的实际图像与给定的JPEG图像相同 参考图像: JPEG: 巴布亚新几内亚: 我只是想去掉PNG格式图像不应该出现的黑色边框 下面是我的代码片段Android 为什么PNG在PNG格式的图像周围形成黑色边缘?,android,server,base64,png,jpeg,Android,Server,Base64,Png,Jpeg,我从gallery中选择图像,将其转换为Base64并发送到服务器。对于JPEG图像,它工作良好;我从服务器上的gallery上传的图像将显示在服务器文件夹中。然而,当我从手机图库上传PNG格式的图片时,它在服务器上并没有显示相同的内容;相反,它会在其周围创建黑色边。我真的不知道怎么了 此外,我的实际图像与给定的JPEG图像相同 参考图像: JPEG: 巴布亚新几内亚: 我只是想去掉PNG格式图像不应该出现的黑色边框 下面是我的代码片段 FileInputStream mFileInputS
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();
}
您想上传图像文件。但首先要使用BitmapFactory将它们生成位图。然后将位图压缩为jpg或png字节数组。在这之后,您将base64将字节编码为您上载的字符串 多大的腰围啊。你已经更改了文件。去掉中间位图 而是直接在字节数组中加载文件。然后像往常一样继续使用字节数组
话虽如此,我认为先对文件的字节进行base64编码是个坏主意,因为它会增加必须传输的字节数的30%。您想上传图像文件。但首先要使用BitmapFactory将它们生成位图。然后将位图压缩为jpg或png字节数组。在这之后,您将base64将字节编码为您上载的字符串 多大的腰围啊。你已经更改了文件。去掉中间位图 而是直接在字节数组中加载文件。然后像往常一样继续使用字节数组
话虽如此,我认为先对文件的字节进行base64编码是个坏主意,因为它会增加必须传输的字节数的30%。我认为如果我直接将文件转换为base64,它会崩溃&get-OutOfMemory exception.No。这肯定会占用更少的内存。因为位图占用的内存最多。但是,如果您希望使用尽可能少的内存,那么首先不要使用base64编码。这样,您就不必首先在memorny中加载字节数组中的文件,但可以直接上载该文件。我认为,如果我直接将文件转换为base64,它将崩溃&get-OutOfMemory exception.No。这肯定会占用更少的内存。因为位图占用的内存最多。但是,如果您希望使用尽可能少的内存,那么首先不要使用base64编码。这样,您就不必首先在memorny中加载字节数组中的文件,而是可以直接上载该文件。