Android 为什么PNG在PNG格式的图像周围形成黑色边缘?

Android 为什么PNG在PNG格式的图像周围形成黑色边缘?,android,server,base64,png,jpeg,Android,Server,Base64,Png,Jpeg,我从gallery中选择图像,将其转换为Base64并发送到服务器。对于JPEG图像,它工作良好;我从服务器上的gallery上传的图像将显示在服务器文件夹中。然而,当我从手机图库上传PNG格式的图片时,它在服务器上并没有显示相同的内容;相反,它会在其周围创建黑色边。我真的不知道怎么了 此外,我的实际图像与给定的JPEG图像相同 参考图像: JPEG: 巴布亚新几内亚: 我只是想去掉PNG格式图像不应该出现的黑色边框 下面是我的代码片段 FileInputStream mFileInputS

我从gallery中选择图像,将其转换为Base64并发送到服务器。对于JPEG图像,它工作良好;我从服务器上的gallery上传的图像将显示在服务器文件夹中。然而,当我从手机图库上传PNG格式的图片时,它在服务器上并没有显示相同的内容;相反,它会在其周围创建黑色边。我真的不知道怎么了

此外,我的实际图像与给定的JPEG图像相同

参考图像:

JPEG:

巴布亚新几内亚:

我只是想去掉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();
        }

您想上传图像文件。但首先要使用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中加载字节数组中的文件,而是可以直接上载该文件。