In this tutorial, we will learn how to programmatically create animated GIF by combining multiple images in java easily. We will make use of the library gifencoder for this purpose.
Add the ‘gifencoder’ library to your project
If you are using Gradle, add the following dependency into your build.gradle file.
// https://mvnrepository.com/artifact/com.squareup/gifencoder implementation group: 'com.squareup', name: 'gifencoder', version: '0.10.1'
If you are using the maven, add the following entry into your pom.xml file.
<!-- https://mvnrepository.com/artifact/com.squareup/gifencoder --> <dependency> <groupId>com.squareup</groupId> <artifactId>gifencoder</artifactId> <version>0.10.1</version> </dependency>
If you are using Java 9+ with modules, add the following line into your module-info.java file.
requires com.squareup.gifencoder;
Build GIF from multiple image files
First, let’s build our GIF from 4 image files. The steps for preparing the GIF from images as follows.
- Convert the BufferedImages to int[][] pixel array
- Provide the image pixel array into the encoder
- Encode all the pixel array-based images into GIF image
Make sure that all the images you are using to prepare the GIF have the same size as that of the GIF. Automatic resizing of images is not done in the following code. If you want to do automatic resizing/cropping, take a look into the Thumbnailator library to do it easily.
import com.squareup.gifencoder.FloydSteinbergDitherer; import com.squareup.gifencoder.GifEncoder; import com.squareup.gifencoder.ImageOptions; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; public class JavaGifTutorial { public static void main(String[] args) throws Exception { JavaGifTutorial gifTutorial = new JavaGifTutorial(); gifTutorial.createAnimatedGif(); } private void createAnimatedGif() throws Exception { File image1 = new File("gifencoder/image1.jpg"); File image2 = new File("gifencoder/image2.jpg"); File image3 = new File("gifencoder/image3.jpg"); File image4 = new File("gifencoder/image4.jpg"); //The GIF image will be created with file name "my_animated_image.gif" try (FileOutputStream outputStream = new FileOutputStream("my_animated_image.gif")) { ImageOptions options = new ImageOptions(); //Set 500ms between each frame options.setDelay(500, TimeUnit.MILLISECONDS); //Use Floyd Steinberg dithering as it yields the best quality options.setDitherer(FloydSteinbergDitherer.INSTANCE); //Create GIF encoder with same dimension as of the source images new GifEncoder(outputStream, 500, 313, 0) .addImage(convertImageToArray(image1), options) .addImage(convertImageToArray(image2), options) .addImage(convertImageToArray(image3), options) .addImage(convertImageToArray(image4), options) .finishEncoding(); //Start the encoding } } /** * Convert BufferedImage into RGB pixel array */ public int[][] convertImageToArray(File file) throws IOException { BufferedImage bufferedImage = ImageIO.read(file); int[][] rgbArray = new int[bufferedImage.getHeight()][bufferedImage.getWidth()]; for (int i = 0; i < bufferedImage.getHeight(); i++) { for (int j = 0; j < bufferedImage.getWidth(); j++) { rgbArray[i][j] = bufferedImage.getRGB(j, i); } } return rgbArray; } }
Create GIF from all the images from a folder
Now, let’s see how we can improve the above code to take all the image files from a folder and use it to make an animated GIF. This way, you can simply put all the images you want to include the GIF image and run the code, no need to mention the individual images separately.
To achieve this, we need to add code for filtering only image files from a directory.
How to take only image files from a directory in Java?
Let’s see how to filter-out only JPEG and PNG files from a directory in Java. We will write code to iterate through all the files present in a directory, and then filter out only the image files by their extension.
private List<File> getAllImageFilesFromFolder(File directory) { //Get all the files from the folder File[] allFiles = directory.listFiles(); if (allFiles == null || allFiles.length == 0) { throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath()); } //Filter out only image files List<File> acceptedImages = new ArrayList<>(); for (File file : allFiles) { String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1); if (fileExtension.equalsIgnoreCase("jpg") || fileExtension.equalsIgnoreCase("png")) { acceptedImages.add(file); } } //Return the filtered images return acceptedImages; }
Create GIF from all the images in the folder
Now, let’s make use of the above function to get all the images from a folder and encode it into a GIF image.
//Trimmed code. Functions and imports used on the first section is excluded to keep the code compact private void createAnimatedGifFromFolder(String path) throws Exception { //The GIF image will be created with file name "gif_from_folder.gif" try (FileOutputStream outputStream = new FileOutputStream("my_animated_image.gif")) { //Create GIF encoder with same dimension as of the source images GifEncoder encoder = new GifEncoder(outputStream, 1920, 1200, 0); //Get all the image files List<File> imageFiles = getAllImageFilesFromFolder(new File(path)); //Make sure that at least one image is present if (imageFiles.isEmpty()) { throw new RuntimeException("No image files present!"); } //Add all the images to the GifEncoder ImageOptions options = new ImageOptions(); for (File imageFile : imageFiles) { encoder.addImage(convertImageToArray(imageFile), options); } //Finish encoding and create the file encoder.finishEncoding(); } } private List<File> getAllImageFilesFromFolder(File directory) { File[] allFiles = directory.listFiles(); List<File> acceptedImages = new ArrayList<>(); for (File file : allFiles) { String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1); if (fileExtension.equalsIgnoreCase("jpg") || fileExtension.equalsIgnoreCase("png")) { acceptedImages.add(file); } } return acceptedImages; }
That’s all. The function createAnimatedGifFromFolder(String folder) will go through all the JPG and PNG images available inside it and then use it to make the GIF animated image.
Conclusion
In this tutorial, we have learned how to create an animated GIF image a set of images in Java. Java GIF creation is done with the help of the gifencoder library. If you have liked this article, you might want to check out some of the other articles I have written.
… [Trackback]
[…] Find More to that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Read More on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Read More here to that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Find More Information here on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Information on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] There you can find 61795 additional Information to that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Find More to that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Information on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Read More on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Read More Information here to that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Find More on on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Info on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Find More Information here on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Here you can find 16911 more Info on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Here you can find 53289 more Info on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Here you will find 57648 more Info on that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] There you will find 53243 more Information to that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]
… [Trackback]
[…] Find More here to that Topic: genuinecoder.com/how-to-create-gif-from-multiple-images-in-java/ […]