前几天在网上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;
}
这样就不会出现包访问权限的错误了,网站测试也正常。