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

时间:2016-11-10 06:42:46

标签: android server base64 png jpeg

我从图库中选择图像,转换为Base64并发送到服务器。对于JPEG图像,它工作正常;我从服务器上的库上传的图像同样显示在服务器文件夹中。但是,当我从移动图库上传PNG格式图像时,它在服务器上显示不同;相反,它会在它周围创建黑色边缘。我真的不知道出了什么问题?

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

参考图片:

JPEG:

enter image description here

PNG:

enter image description here

我只是想摆脱不应出现在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();
        }

1 个答案:

答案 0 :(得分:0)

您想要上传图片文件。但是你首先使用BitmapFactory来制作一个Bitmap。然后将位图压缩为jpg或png字节数组。之后,您将base64编码为您上传的字符串。

真是个好消息。你已经改变了文件。取消中间位图。

而是直接在字节数组中加载文件。然后像往常一样继续使用字节数组。

我说我认为base64首先编码文件的字节是一个坏主意,因为它增加了必须以30%传输的字节数。