NutzCN Logo
问答 @Ok("raw:png") 返回的图片大小为0
发布于 756天前 作者 sunhai1988 1023 次浏览 复制 上一个帖子 下一个帖子
标签:

1.

@At("/captcha")
    @Ok("raw:png")
    public BufferedImage next(HttpSession session, @Param("w") int w, @Param("h") int h) {
        if (w * h < 1) {
            w = 200;
            h = 60;
        }
        Captcha captcha = new Captcha.Builder(w, h)
                .addText()
//								.addBackground(new GradiatedBackgroundProducer())
//								.addNoise(new StraightLineNoiseProducer()).addBorder()
//								.gimp(new FishEyeGimpyRenderer())
                .build();
        String text = captcha.getAnswer();
        session.setAttribute("captcha", text);
         return Images.createCaptcha(text, w, h, null, null, null);
    }

return Images.createCaptcha(text, w, h, null, null, null); 通过debug 这个代码是有图片的,返回到浏览器<img src=之后 图片尺寸为 0 * 0

9 回复

服务器返回了多少字节,看看

是 content-length 长度吗? content-length = 186

png才186字节?是不是w,h就是0呀

w h 有默认值 ,我debug 返回的return Images.createCaptcha(text, w, h, null, null, null); 是有图片内容的

BufferedImage@653f782d: type = 1 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0 IntegerInterleavedRaster: width = 200 height = 60 #Bands = 3 xOff = 0 yOff = 0 dataOffset[0] 0

图片无法显示

要debug一下RawView,要么返回图片的byte[]

没有进入这个? 要Android的才显示图片?
// 图片?难道是验证码?
if (!Lang.isAndroid && obj instanceof BufferedImage)

// 普通对象
else {
byte[] data = String.valueOf(obj).getBytes(Encoding.UTF8);
resp.setHeader("Content-Length", "" + data.length);
OutputStream out = resp.getOutputStream();
Streams.writeAndClose(out, data);
}

```

搞定了 加了一个apk的jar 去掉就好了

添加回复
请先登陆
回到顶部