Android 在将Base64字符串解码为图像时,我得到了一个完全黑色的图像

Android 在将Base64字符串解码为图像时,我得到了一个完全黑色的图像,android,encoding,decoding,Android,Encoding,Decoding,我使用这个函数对图像进行编码 private String encodeImage(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG,100,baos); byte[] b = baos.toByteArray();

我使用这个函数对图像进行编码

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);
            }
        });

在使用在线工具对由此生成的字节64字符串进行解码时,我得到了一幅完全黑色的图像

这是我的字节64字符串

/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
ZnjkjtnNv1/+szDnk59vYkE85qxplvHIZf3nUccnn5n9ScfXrnPGMU4R23nT+XL+9wBcH7PyMF/+
Qbz65z7Y44Y1Nb4pf4p/+lDe8vX/ANuqFcRySOZPM/dZGcjHQtjjOO/H1GD1aqssf2Z2jlkz5PWf
HI5Yf1HfsOo5qV7wCZoo4/T/AJd/dhnr/u9e/AHU1Vu5PtDmOWT97x09cv7k9uPcsM8E1wm5YYRS
TRxRn975AuO47sB69MdPXbnGclIvLBZ5IoovJx5B8/8A3vQnt+ucnBOI7eM+WZEll/cQfZ8z5PGW
98DsfxHo2YZPLklaXzPNlwMfuP8Aj2+/7nrzj3xySGFerht3/gX/AKUZU95en/txutbR7JpI7eL9
f9Jwze+e/fr6jGSwRxxxmWOKKL/R+59C3v3z36DOOCRVPzJJIZc/vRzcCAf7zjse+0e/JzkhjVeN
/KgMn/bfyOfVhz/nuM8gE4Vvil/in/6US95ev/t1QmElvvnkE2eg/wCPY+rf7R9PY5Ix0AqWXy5E
Mkc0vlDHEA937hvTHuOc9dxypX8yMxR/6ybrBz6t/Pg9ehwcANmKO4kkzHJ/yxx55+hf+gP59ejH
L2K8vvkPml3/AARWu7cSR4kaWWKbGbfz/d/fPbPXjnOcDMun6XZbzJ50vmw4HkEEdC/P3j/iPmBy
cmpF8uN28yT/AFM49AOC3uc4HTnOMDOSc2hcSRuZPM8o/wDHvbwQf8vXLZOc8cfiMLyMnJ7FeX3y
Dml3/BE8dvHva2iH7rj8eWx1P17+3NUGj8tJ4/3v+oHn8e7e+ecnr37ggiiO4AgMkcn7qaD092Gp
dTnnJ/I5AI5tXEgjtY5JJB5vkC4/cDtlvfP5ewwQQRzGxDFcSSC49Jtvr/00Hr7j6HHJIYmzH/q5
7jzZT0t/tEGM53MPXsep/wB3ORzWZFJl08rmX5f/AEJ/c+mfX1yAM2RJ5gMklznp5At/cvjr/P0J
xkBshx4jZ/4l/wCk1CK6tQ7GPbCZYZxjg8/MenOOmff1BIwKjwRx+ckvlfvrjE/vyw65465zzyeh
FaJdJ3LvF+94888/ZMZb+YAwPcck5ziarfNbOX2ed+/HYdiSfz9c9h3OT04ek2m2272d2krq7s7J
vTTzb3b5Wr8LpRau1p01ld3du/z1e3cJJJJJHEVt5vkYxyfVupOPXj+ecE3rW4Hk+Z5f/wAmY3Sd
8f59e9Ztm0tz58r3PBtx5H/L19psgXHc+o+p45JHOmj29tFEJZIs8eR+46Hc/v1xjB/xIPU6Datd
7r7L6c3n5/1c6qErtq32V+bX6X+/s722j8yBvL56euOr88n8u5yRkkZrA1GSTzY44/8AVcf6jPbf
7n/HGRng1tWtxLIGl8zMXA8/p3bHf/Z57ZwMZyTI1nJI08vl/wCpxPOefVgD17+/TC5JByFP+JP5
/wDpR1095en/ALcNtfNngjuI/a49f9Cy/ufT8iDkFTQ1xFbbvMz++9fq388EevQds0NbyRgyf8su
P35H/LkCw6EkjHH0yeTyaqt/pDGOX91+fcn/AA/yQak1LEvDG4j8398Rcd+eW9/c9e2MkA1QaSSS
YxeZ/rsfuPIPYt7jr+nHXIrVjjjkE0fmS4m7+QB0Lf7XfPb2GcAk59xH5jXkcfm9s+fn1kA9fxFB
zlVYY3adBJKVm/6YdOcf3j35GBx0zj5qu+SC8X7znyBxg+r++AflyTk9QMHbkssXikzJJL5UsM/+
j2/4+57dT+QOeavyQyTwRmKTypf+PjH/AAJxxkk5Pynjtgc4NcVSlv5W283PVabaardK1nZa3FqS
s3r0fza/9tfr3vq6reXvn/d/usr/AMu5A4Mg7nj1z16jg81FL5dxG3+jRfvv9H/8ef29l/ToScy+
X/yz8z/t3/Hr1/DOffNA8uJDJLL5XT/UZ6ZYeo9emfqcjJfs/P8AD/gkEUsckWRxF+/H/Lv6lx3O
e3559ATViSXy4/M/e+SRzz/ebH8/6E5GToWs8f76SWH95xzcE9Mvj8Tzx24GcBjUVy8kkZ+ziL99
79gzfpx7Y3Dnk1mZ/Vl/e++P+RchDrF5ckuOuOuOpzwT7ZB9+3GbisVjjCAHGMYPI+/jHHfPc9MY
yDWLYMruY4gfO9fI/wCPflh3P5+2AcnBq19pOyaNR50kHaD3LenPYe/TkgnOPs21bT8fP+vm9Xrf
poyavZprR/K72s9U9L66bp3uWpVWTz4vM/5Yc8j1foN3Qk/hxyc1VjRsTx4z/wBMMj1Pqcnt3656
mmCeKQNLv83zpxnnryw9f9n1zyOpyaBHgT+YP3s3Fvz6FvUHgZ79sdwcyTzvy+5//JDrhl/dyebF
/wCA57Hj8+p/LOearbGjB8zgTY/0fIz1bHGfb69PRiWRx+XIY5Jov3P/AE2P2Tq/v+OM85POME2R
cSSZ/wDbfPq3OP8AgP8APOMYPbRk489rfZ79Obz8/wAuzvTn2s9+j+XUvWVulzn95nGPT1bnr6Yx
1zzySBUYkw05kMpAKj36uOwzzjJHXtyQCasdxFFMfLk7D36E/wCJOM55xkdaScZlLyH96f8Alv8A
QsfX6/j3xursw8pNy0Vr07+nNPz/ALq+97kqb626dHteV+vZRfzfVMmkSRmMsUsp87Hri5wz8j9T
jryepAYyRIY4448enn9P9GvOQe/r15I5GcAZqJXiDGKPnHE/v8xx3PqR69cZwxq+H8sRyeb/AMsB
5A/4E+e59vfr68lWUot6K15W9FKXn5/l2dzneu

你的编码是正确的,只是检查了一下。您很可能在尝试从logcat复制编码字符串时出错。只需将断点放在
Log.d()
上,复制编码的字符串值,然后通过在线工具再次检查它。我曾经测试过结果。

我没有用Android编写代码,但我认为你把数据弄混了。例如,say
decodeByteArray
将“从指定的字节数组解码一个不可变的位图”。因此这一行:

Bitmap bitmap = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length);
仅当
jpeg
数组包含原始RGB颜色值而不是实际的jpeg值时才有效(因为jpeg是压缩数学而不是颜色数组)

试试这个,看看是否有人可以显示字符串
加密图像
。没有使用另一个函数
私有字符串encodeImage(位图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);
    }
}); 

请也添加解码代码块。@ArtyomDorosh我已经用网站解码器解码了。什么在线工具?如果你不告诉我们,我们就不能复制你的问题。@Alex看到了,我完全复制粘贴了上面的字符串,得到了一个完全黑色的图像。这是看到这一点,我已经完全复制粘贴上面的字符串,并得到一个完全黑色image@mayanktripathi你能在原始问题中分享你是如何创建这个位图的吗?是的,我已经添加了那个部分。对我来说,问题是从logcat复制