前几天在网上copy了一段代码,关于struts2生成验证码,原本拷贝下来的myeclipes报错,原因是下面这三个类访问权限问题:
- import com.sun.image.codec.jpeg.ImageFormatException;
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
但是实际使用过程中是不会出错的,也可以通过设置将error改成warning,但是害怕老师那边过不去,所以去除了这三个类,改成下面的:
- import javax.imageio.ImageIO;
其实原理很简单,原本com.sun.image.codec.jpeg这里面的类是将BufferedImage转换成ByteArrayInputStream,只是换了一种实现方法,源代码如下:
- /**
- * 将BufferedImage转换成ByteArrayInputStream
- *
- * @param image
- * 图片
- * @return ByteArrayInputStream 流
- *
- */
- private static ByteArrayInputStream convertImageToStream(BufferedImage image)
- throws IOException {
- ByteArrayInputStream inputStream = null;
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ImageIO.write(image, "gif", bos);
- /*
- ImageIO.write(BufferedImage image,String format,OutputStream out);
- 参数image表示获得的BufferedImage;
- 参数format表示图片的格式,比如“gif”等;
- 参数out表示输出流,如果要转成Byte数组,则输出流为ByteArrayOutputStream即可;
- 执行完后,只需要toByteArray()就能得到byte[];
- */
- byte[] bts = bos.toByteArray();
- inputStream = new ByteArrayInputStream(bts);
- return inputStream;
- }
这样就不会出现包访问权限的错误了,网站测试也正常。