public static boolean saveBase64Pic(String imgStr,Integer imgStrLength,String picNewname,String keepFilePath){
 //对字节数组字符串进行Base64解码并生成图片  
imgStr=imgStr.replaceFirst("data:image/jpeg;base64,", "");
System.out.println("后来:"+imgStr);
        if (imgStr == null) //图像数据为空  
            return false;  
        BASE64Decoder decoder = new BASE64Decoder();  
        try   
        {  
            //Base64解码  
            byte[] b = decoder.decodeBuffer(imgStr);  
            System.out.println("imgStrLength:"+imgStrLength+",解码后长度:"+b.length);
            for(int i=0;i<b.length;++i)  
            {  
                if(b[i]<0)  
                {//调整异常数据  
                    b[i]+=256;  
                }  
            }  
            //生成jpeg图片  
            String imgFilePath = keepFilePath+"\\"+picNewname;//新生成的图片  
            //String imgFilePath ="e://222.jpg";
            System.out.println(imgFilePath);
            OutputStream out = new FileOutputStream(imgFilePath);
            out.write(b);  
            out.flush();  
            out.close(); 
            return true;  
        }   
        catch (Exception e)   
        {  
            return false;  
        }
 }

解决方案 »

  1.   

    什么数据经过Base64解码后还能生成图片?你的源数据怎么来的?  
      

  2.   

     //输出base64 数据,截取","之后的值进行转换
       String str = text.substring(text.indexOf(",")+1);
    因为base64图片的前缀是需要去掉的,网上的大多数没说这个问题。截取下数据就好了
      

  3.   


    楼主已经做了这个操作了:imgStr=imgStr.replaceFirst("data:image/jpeg;base64,", "");
    使用这个方法试试吧,亲测,没有问题: public static boolean generateImage(String base64Code, String path) {  
            if (null == base64Code) {  
                return false;  
            }  
              
            byte[] base64Byte = Base64.decodeBase64(base64Code);  
              
            try {  
                OutputStream out = new FileOutputStream(path);  
                out.write(base64Byte);  
                out.flush();  
                out.close();  
                return true;  
            } catch (Exception e) {  
                return false;  
            }  
              
        }  
    其中Base64 是导入的这个包org.apache.commons.codec.binary.Base64注意:也得吧前缀data:image/jpeg;base64,去掉
      

  4.   


    System.out.println("前面:"+imgStr); // 前后确认下 有些图可能不是 jpg, 
    imgStr=imgStr.replaceFirst("data:image/jpeg;base64,", "");
    System.out.println("后来:"+imgStr);
    // 这个操作没有必要
    for(int i=0;i<b.length;++i)
    {  
        if(b[i]<0)  
        {//调整异常数据  
            b[i]+=256;  
        }  
    }