java - 使用JAVA可以快速从网站下载图片吗

标签 java image web download

假设我们有这个 URL

“mysite.com”

在此站点中,我们有一个名为 images 的目录,其中包含大约 200 张 .PNG 图片

我想制作一个程序,一张一张地扫描这些图片(如果你知道上一张图片的URL,你可以预测图片的URL),然后我想在我的JFrame上显示这张图片

我最初的想法是,既然我知道 URL,为什么不扫描所有不同的图像 URL,然后执行此操作呢?

  Image image = ImageIO.read(url); hasImage.setIcon(new
  ImageIcon(image));

现在

 hasImage

是一个 JLabel,我使用刚刚从 URL 下载的图像

url

是 URL 类的对象

因此,每次在循环中我都会找到新的 URL,然后调用包含我刚刚在上面发布的两行代码的函数,以便更新标签上的图像

请注意,这两行位于按钮 ActionListener 内,因此每次单击该按钮时,都会显示下一张图像

这里有 1 个主要问题。

当我想显示下一张图像时,需要一些时间来创建新的 url 对象,下载图像,然后将其显示在我的标签上,这有点烦人,特别是如果您很着急并且想要快速显示图像...

现在,我想到了另一种实现方式,为什么不直接下载所有图像,将它们保存在本地某个位置,然后扫描存储图像的目录并在每次单击按钮时显示它们?

好的,我这样做了,但问题是下载所有图像需要一分多钟的时间 之后它就可以顺利运行,速度非常快

所以这里的一个大问题是下载图像需要花费很多时间,所以它基本上是以前的实现,但是在这个实现中,我不是在按下按钮时等待一点,而是等待一切都完成下载,这需要相同的时间...

我的问题是,怎样才能让它更快?如果它能在 5 秒内下载所有图像,我会很满意

这是我用来保存图像的函数

   private void saveImages() {
    Image image;
    int ID = 1;
    String destFile = "destFolder" + ID + ".png";

    try {
        image = ImageIO.read(url);
        ImageIO.write((RenderedImage) image, "png", new File(destFile));
    } catch (IOException ex) {

    }

    while (ID < 200) {
        try {
            String path = url.getPath();

            String[] token = path.split("-");
            String[] finalToken = token[2].split("\\.");
            ID = Integer.parseInt(finalToken[0]);
            url = new URL("http://somesite/images/" + (ID + 1) + ".png");


            destFile = "C:\\...\\destFolder\\" + ID + ".png";
            image = ImageIO.read(url);
            ImageIO.write((RenderedImage) image, "png", new File(destFile));

        } catch (MalformedURLException ex) {

            JOptionPane.showMessageDialog(null,
                    "URL is not in the correct form", "Malformed URL",
                    JOptionPane.ERROR_MESSAGE);

        } catch (IOException ex) {
        }
    }

    JOptionPane.showMessageDialog(null, "Images were loaded successfully",
            "Success", JOptionPane.INFORMATION_MESSAGE);
}

编辑:顺便说一句,我对代码感到非常抱歉,它有点困惑,这只是我输入的第一件事......我稍后会对其进行更好的更改,但我希望您了解我遇到的问题我现在面临着:)

最佳答案

Java 或实现都不是问题,问题在于连接速度。要么下载应用程序所需的所有图像(这需要一些时间,并且如果未查看图像则毫无意义),要么在单击图像时加载它们。

如果您想让它看起来更快一点,您可以开始将图像加载到本地数据库或文件系统(如缓存)中。这显然有其缺点,因为一旦图片加载一次,它只会使加载时间更快,并且通常理想的情况是没有很大的缓存。

您还可以在仅查看一张图像时加载下一张和上一张左右的五个图像,这将使用户感觉速度更快。

关于java - 使用JAVA可以快速从网站下载图片吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364073/

相关文章:

html - Javascript/php 轮播无法正常工作

javascript - 在 jQuery 1.8+ 中检测图像加载 - 自弃用以来替代 load()

javascript - Navigator.share 在 Angular 中不起作用,但在 codepen 中的测试中起作用

html - 自动调整字体高度和宽度

javascript - 语义 UI 侧边栏不会显示 - React

java - ArrayList 中的元素如何工作?

java - 使用 Java 中的方法检查二维 boolean 数组中的所有条目是否为真/假?

java - 如果用户通过单击同一按钮返回 Activity ,请保持 RecyclerView 适配器复选框处于选中状态[Kotlin]

javascript - 以编程方式从 Raphael.JS 图像生成 PNG

java - Java 中图像的组合重新缩放和颜色减少?