2 qq 30420315 qq_30420315 于 2016.02.04 16:26 提问

ImageIo.read() 返回null

具体代码如下:
imgStr是一个base64字符串
public static String decoderQRCodeForBase64(String imgStr) throws Exception {
if (imgStr == null) {
return "";
}

    BASE64Decoder decoder = new BASE64Decoder();
    byte[] b = decoder.decodeBuffer(imgStr);
    for (int i = 0; i < b.length; ++i) {
        if (b[i] < 0) {// 调整异常数据
            b[i] += 256;
        }
    }

    InputStream input = new ByteArrayInputStream(b);

    String content = decoderQRCode(input);

    return content;

}


public static String decoderQRCode(InputStream input) throws Exception {
    BufferedImage bufImg = null;
    String content = null;

    bufImg = ImageIO.read(input);
    QRCodeDecoder decoder = new QRCodeDecoder();
    content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)),
            "utf-8");

    return content;
}

在bufImg = ImageIO.read(input);这里读不出来,返回的是null,为什么呢,求大神解答,小白在线等。

3个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.04 18:50
已采纳

捕获下异常,看看运行时有没有异常信息。

paopaoTT
paopaoTT   2016.02.04 19:25

首先要看下你是真么调用的么?

caozhy
caozhy   Ds   Rxr 2016.02.04 22:07

b[i]会不会小于-256或者大于256?调试下。byte的范围只能是0~255

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
ImageIo read() 读取图片时返回 Null
利用:String names[] = ImageIO.getReaderFormatNames();  String names[] = ImageIO.getReaderFormatNames();得到 ImageIo 可以读取图片的格式 :[BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif] 而当我们读取
JAVA处理不正确处理图片ICC信息蒙上红色的问题 放弃ImageIO.read()
问题现象: Java上传图片时,对某些图片进行缩放、裁剪或者生成缩略图时会蒙上一层红色,原因乃是ImageIO.read()方法读取图片时可能存在不正确处理图片ICC信息的问题,ICC为JPEG图片格式中的一种头部信息,导致渲染图片前景色时蒙上一层红色。 [java] view plain copy public static
javax.imageio.ImageIO.read(file) 内存溢出
近期使用ImageIO对象生成图片的缩略图功能,无论图片大小,总是会报出以下异常信息: Caused by: java.lang.OutOfMemoryError: Java heap space         at java.awt.image.DataBufferByte.(Unknown Source)         at java.awt.image.ComponentSampl
Atitit java读取tif文件为空null的解决 图像处理
Atitit java读取tif文件为空null的解决 图像处理   Jdk8.。 public static byte[][] toByteArr(String filename) { if(!new File(filename).exists()) throw new RuntimeException("file not exist:"+filename); System.ou
ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(上)
1.在项目中为了处理用户上传的图片,会对图片进行重写处理,故使用了类似下面的代码: File src = new File("e:/img/google.jpg"); BufferedImage bi = (BufferedImage)ImageIO.read(src); BufferedImage bi_scale = new BufferedImage(bi.getWidth
ImageIO.read(File file) 报异常"Unsupported Image Type",不支持CMYK格式图片问题解析和解决方式
ImageIO.read(File file)报异常"Unsupported Image Type",是因为其内部读取文件的类JPEGImageReader只能读取RGB color model,而你的图片可能被ps过,color model是CMYK。 如果你坚持要读取CMYK图片,你需要转换图片,使用一下代码。                 BufferedImage bufferedI
ImageIO操作图片
package test; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.logging
ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(下)
在经过一系列探索,《ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(上)》篇已经通过Jimi初步解决,但在Linux平台下必须开图形界面才行,但现实情况,服务器一般运行在init 3级别下,init 5不太现实,另外Jimi对象图片的处理也较差,部分图片重写后质量降低,模糊等,由此也证明了Java语言在处理图片上的劣势,这是非常让人纠心的事,最终只能借助于无敌的Imag
ImageIO并发情况下内存溢出问题(jdk1.7以下)
class DoMutil implements Runnable { int threadNum = 1; int nums = 1; public DoMutil(int threadNum, int nums) { this.threadNum = threadNum; this.nums = nums; } @Override public void
conn.getInputStream 显示为空指针
1、Android 网络 http访问url 的代码,下面这段代码是没有问题的,但是在我调用的时候出了个奇怪的bug,报错显示 HttpURLConnection inputStream,conn.getInputStream 显示为空指针 nullpointexception,后来通过查找相关资料,找到了症结。 原因:4.0之后的系统上面,主线程访问过网络的请求,不可以再次同步请求其他的网