Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Load and display all the images from a folder

Tags:

java

file

image

I want to read all the images in a folder using Java.

When: I press a button in the Java application,
It should:

  • ask for the directory's path in a popup,
  • then load all the images from this directory,
  • then display their names, dimension types and size.

How to proceed?

I have the code for read the image and also for all image in the folder but how the things i told above can be done?

Any suggestion or help is welcome! Please provide reference links!

like image 835
kundanraj Avatar asked Jul 02 '12 20:07

kundanraj


People also ask

How do I display all images in a directory in HTML?

Simply run the command from a command line window in the directory where your images are stored. If you need to have the all. html in some other place either move it there or change to >> C:\files\html\all.

How does Jupyter notebook read pictures from a folder?

To read the image using OpenCV I have defined load_images_from_folder function which takes a path where images are stored as an input parameter , In the next step cv2. imread function read all files in a folder and append them to images =[] list then return images list.


2 Answers

Untested because not on a machine with a JDK installed, so bear with me, that's all typed-in "as-is", but should get you started (expect a rush of downvotes...)

Loading all the Images from a Folder

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Test {

    // File representing the folder that you select using a FileChooser
    static final File dir = new File("PATH_TO_YOUR_DIRECTORY");

    // array of supported extensions (use a List if you prefer)
    static final String[] EXTENSIONS = new String[]{
        "gif", "png", "bmp" // and other formats you need
    };
    // filter to identify images based on their extensions
    static final FilenameFilter IMAGE_FILTER = new FilenameFilter() {

        @Override
        public boolean accept(final File dir, final String name) {
            for (final String ext : EXTENSIONS) {
                if (name.endsWith("." + ext)) {
                    return (true);
                }
            }
            return (false);
        }
    };

    public static void main(String[] args) {

        if (dir.isDirectory()) { // make sure it's a directory
            for (final File f : dir.listFiles(IMAGE_FILTER)) {
                BufferedImage img = null;

                try {
                    img = ImageIO.read(f);

                    // you probably want something more involved here
                    // to display in your UI
                    System.out.println("image: " + f.getName());
                    System.out.println(" width : " + img.getWidth());
                    System.out.println(" height: " + img.getHeight());
                    System.out.println(" size  : " + f.length());
                } catch (final IOException e) {
                    // handle errors here
                }
            }
        }
    }
}

APIs Used

This is relatively simple to do and uses only standard JDK-packaged classes:

  • File
  • FilenameFilter
  • BufferedImage
  • ImageIO

These sessions of the Java Tutorial might help you as well:

  • Reading/Loading an Image
  • How to Use Icons
  • How to Use File Choosers

Possible Enhancements

  • Use Apache Commons FilenameUtils to extract files' extensions
  • Detect files based on actual mime-types or content, not based on extensions
  • I leave UI code up to you. As I'm unaware if this is homework or not, I don't want to provide a full solution. But to continue:
    • Look at a FileChooser to select the folder.
    • I assume you already know how to make frames/windows/dialogs.
    • Read the Java Tutorial How to Use Icons sections, which teaches you how to display and label them.
  • I left out some issues to be dealt with:
    • Exception handling
    • Folders with evil endigs (say you have a folder "TryMeIAmEvil.png")

By combining all of the above, it's pretty easy to do.

like image 118
haylem Avatar answered Oct 06 '22 16:10

haylem


javaxt.io.Directory directory = new javaxt.io.Directory("C:\Users\Public\Pictures\Sample Pictures"); directory.getFiles(); javaxt.io.File[] files;

    java.io.FileFilter filter = file -> !file.isHidden() && (file.isDirectory() || (file.getName().endsWith(".jpg")));
    files = directory.getFiles(filter, true);
    System.out.println(Arrays.toString(files));
like image 44
Statenco Avatar answered Oct 06 '22 17:10

Statenco