【问题标题】:display random pictures using java使用java显示随机图片
【发布时间】:2023-11-06 10:40:02
【问题描述】:

我正在尝试根据 Random() 方法的生成显示随机图片(只是尝试像验证码之类的东西)。我正在从数组中生成随机编号,但不知道如何将这些编号与图像映射。有任何想法吗 ?我到目前为止所做的:

导入 java.util.Arrays; 导入 java.util.Random;

公共类 Gen_Captcha {

static String[] myCaptchaLetters = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9"};
Gen_Captcha captcha= new Gen_Captcha();
public static void main(String[] args) {
    Random randomGenerator = new Random();
    for(int i=0;i<5;i++){
        int random = randomGenerator.nextInt(62);
        System.out.print((myCaptchaLetters[random]));       
    }

}

}

}

注意:以上代码不包含显示图片的swing框架代码。

【问题讨论】:

    标签: java arrays swing random captcha


    【解决方案1】:

    创建一个List&lt;BufferedImage&gt;,并使用Collections.shuffle() 随机化列表。使用列表的迭代器将随机访问图像而不会重复。

    【讨论】:

    • 听起来不错。但是,我假设这只会给我图像列表,并且不会有与之关联的元素。万一我希望用户输入他在图像中看到的数字或字母,我将无法验证该用户输入。如果我错了,请纠正我。
    • 除了通过它的迭代器访问列表之外,您还可以通过索引或引用来访问它。而不是List&lt;BufferedImage&gt;,改组List&lt;MyClass&gt;MyClass 的每个实例都包含字母和图像。使用前 n 个元素作为键。
    【解决方案2】:

    但不知道如何将这些不与图像映射

    不要映射数字,映射字母:

    Map<String, Image> images = new HashMap<String, Image>();
    images.put("a", imageA);
    images.put("b", imageB);
    

    【讨论】:

      【解决方案3】:

      你可能想看看Graphics.drawString()

      您可以通过创建BufferedImage 来获取graphics2D 对象 请注意,还有一些方法可以更改字体。 对于更高级的验证码,您可以使用相同的 api 扭曲图像并在其上绘制随机内容。

      【讨论】: