3

我尝试使用 JCaptcha 组件制作验证码,我需要在相关的 servlet 中对图像进行编码。所以根据JCaptcha Tutorial,我应该使用JPEGImageEncoder,它与JDK7不兼容。我还可以做些什么?
这是代码的相关部分:

     ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
     BufferedImage challenge =
             CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,
                     httpServletRequest.getLocale());
   JPEGImageEncoder jpegEncoder =
                 JPEGCodec.createJPEGEncoder(jpegOutputStream);
         jpegEncoder.encode(challenge);
     } catch (IllegalArgumentException e) {
         httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
         return;
     } catch (CaptchaServiceException e) {
         httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
         return;
     }
4

1 回答 1

4

使用ImageIO

ImageWriter imageWriter = 
    ImageIO.getImageWritersBySuffix("jpeg").next();
ImageOutputStream ios = 
    ImageIO.createImageOutputStream(jpegOutputStream);
imageWriter.setOutput(ios);
IIOMetadata imageMetaData = imageWriter.getDefaultImageMetadata(
    new ImageTypeSpecifier(challenge), null);
imageWriter.write(
    imageMetaData, new IIOImage(challenge, null, null), null);

这取代了内部和不推荐使用的 JPEG 函数。

于 2015-02-18T09:34:16.207 回答