先看效果
要看懂代码,先搞懂这些方法
-
Image类
- Image 类并不可以直接构建图片对象,因为它是一个抽象类。
- 我们通过
BufferedImage
方法来构造
-
BufferedImage(int width,int height,int imgeType)
- 创建指定大小、指定图像类型的 BufferedImage对象。
- BufferedImage 构建好指定大小和类型的图像对象后,我们用Java提供的画笔工具
-
Graphics2D pen = (Graphics2D) image.getGraphics();
- 有了画笔就开始画呗
pen.setColor(Color.RED)
这个方法是给画笔上色的pen.fillRect(0,0,80,20)
这个方法是给我们构造的矩形图片填充颜色用的,颜色就是刚刚画笔的颜色,参数是指从坐标(0,0)填充到(80,20)pen.drawString(String str)
这个方法是用画笔画一个字符串,在后面我们的验证码的数字或字母就是这个方法画上去的
-
ImageIO
- 画好图片得存起来,我们通过ImageIO来写到磁盘中去
write(image,"jpg",new FileOutputStream("D:/b.jpg"))
这个方法就是把二进制字节文件写到磁盘中去,注意计算机中除了文本是字符文件,其他都是二进制文件。参数:image
就是我们刚刚那个BufferedImage的实例化对象,jpg
是我们将要保存的格式,new FileOutPutStream("D:/b.jpg")
就是标准的字节输出流,参数"D:/b.jpg"
就是我们的二进制文件将要写到的位置
到此为止,我们生成了我们的图片文件,下一步,怎么让Java读取到我们的文件呢?
-
new FileInputStream(path)
-
Image
- 上面我们说Image不能够创建图片实例,但是它可以通过参数-字节输入流来实例化Image对象
new Image(inStream)
通过这个方法实例化Image对象,其中参数inStream
是上面FileInputStream
字节输入流的实例化对象。
-
ImageView
- 这个方法用于JavaFX设置图片时,存放Image参数
new ImageView(image)
我们实例化ImageView对象,参数是上面Image
的实例化对象
-
setGraphic(ImageView imageView)
这个方法就是我们最后给组件设置图片的方法,参数就是上面的ImageView
的实例化对象
代码
public static String createImage(){
BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
Graphics2D pen = (Graphics2D) image.getGraphics();
pen.setColor(Color.WHITE);
pen.fillRect(0,0,80,20);
pen.setColor(Color.BLUE);
pen.setFont(new Font(null,Font.BOLD,20));
String code=createCode(5);
pen.drawString(code,0,20);
try {
ImageIO.write(image, "jpg", new FileOutputStream("D:/b.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
return code;
}
public static String createCode(int len){
StringBuilder result=new StringBuilder();
char[] words=new char[len];
for (int i = 0; i < len; i++) {
int code=0;
if((int)(Math.random()*i%2)==0)
code=(int)(Math.random()*26+65);
else
code=(int)(Math.random()*26+97);
words[i]=(char)code;
}
for(char word:words){
result.append(word);
}
return String.valueOf(result);
}