2017-07-19 1118 views
0

我已经使用此函数对图像进行编码。将Base64字符串解码为图像时,我得到一个完全黑色的图像

private String encodeImage(Bitmap bm) 
     { 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      bm.compress(Bitmap.CompressFormat.JPEG,100,baos); 
      byte[] b = baos.toByteArray(); 
      String encImage = Base64.encodeToString(b, Base64.DEFAULT); 
      Log.d(TAG, "encodeImage: " + encImage); 
      return encImage; 
     } 

这是我如何创建位图图像

setContentView(R.layout.camera); 
     cameraView = (CameraView) findViewById(cameras); 
     cameraView.setJpegQuality(2); 
     cameraView.setCameraListener(new CameraListener() { 
      @Override 
      public void onPictureTaken(byte[] jpeg) { 
       super.onPictureTaken(jpeg); 

       Bitmap bitmap = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length); 
       encodeImage(bitmap); 
      } 
     }); 

enter image description here

解码时通过使用这个在线工具,我得到全黑图像产生的byte64字符串。

这是我byte64串

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB 
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB 
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCBIACiADASIA 
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA 
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm 
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA 
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx 
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK 
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD8GJbi 
TYY/tPp+455wX/l1685HJIJNCWOO4jaSKTzR/wDXOD19icfTnK0NcRyXVtJF5pimx58GOOr+/bA6 
8de61KPNijI8vrxz3+Yjpk8c9D74yDX5OfUCqsMgjkjgi83z+J57c+rn2yDz7A8c5zUUatHMfKSK 
L18gNnq/t34x6c8knJe0eIDJG3lf9PHpy3oT6fnnnrVVfLzex+R/y3E59+ZB/eyP5++ax9hDvL71 
/wDImVofzP7v+AXoPtEUZkj9v9eB1y3PU9sfTJweWqgJPPeaOT/VeQP0LDpz2Pr+IJzV+PzI4z5v 
t/N8nqfY45xnAPJNVY444g0VzHzgf9fnVv8AAfz4P3uUgfZW8clsbiOPzfOg/f8AH+03t7D268gk 
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 
5A/4E+e59vfr68lWUot6K15W9FKXn5/l2dzneu 
+1

请加上解码代码块。 –

+0

@ArtyomDorosh我已经使用网站解码器解码它。 –

+0

什么在线工具?如果你不告诉我们,我们不能复制你的问题。 – Alex

回答

1

您的编码代码OK,只是检查了它。你很可能犯了错误,试图从logcat复制你的编码字符串。只需在Log.d()上放置断点,复制编码的字符串值并通过在线工具再次检查出来。我用this来测试结果。

+0

https://i.stack.imgur.com/DN2NM.png看到这个,我已经完全复制粘贴上面的字符串,并获得一个完全黑色的图像 –

+0

@mayanktripathi你可以分享你如何在原始问题中创建这个位图吗? –

+0

是的,我已经添加了该部分。 –

0

我没有在Android中编码,但我认为你在混合你的数据。例如manual表示decodeByteArray“解码来自指定字节数组的不可变位图”。所以这行:

Bitmap bitmap = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length); 

如果jpeg数组包含原始RGB颜色值而不是实际值JPEG只会工作(因为JPEG压缩是数学不是颜色数组)。

试试这个,看看是否字符串encImage可以通过online tool来显示。没有使用其他功能private String encodeImage(Bitmap bm),因为我怀疑它是问题的一部分...

setContentView(R.layout.camera); 
cameraView = (CameraView) findViewById(cameras); 

cameraView.setPictureFormat(ImageFormat.JPEG); 
cameraView.setJpegQuality(2); 

cameraView.setCameraListener(new CameraListener() { 

    @Override 
    public void onPictureTaken(byte[] jpeg) 
    { 
     super.onPictureTaken(jpeg); 

     String encImage = Base64.encodeToString(jpeg, Base64.DEFAULT); //print and test this string in some B64-to-JPEG decoder/viewer 

     //Bitmap bitmap = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length); 
     //encodeImage(bitmap); 
    } 
}); 
相关问题