How to resize images in Java
- Details
- Written by Nam Ha Minh
- Last Updated on 14 August 2019   |   Print Email
In Java, to resize (or scale) an image read from an image file and save the scaled image into another image file, we can follow these steps:
- Create a BufferedImage object for the input image by calling the method read(File) of the ImageIO class.
- Create a BufferedImage object for the output image with a desired width and height.
- Obtain a Graphics2D object from the output image’s BufferedImage object.
- Draw the input image’s BufferedImageobject onto the output image’s Graphics2D object.
- Save the output image to a file on disk using the method write(File) of the ImageIO class.
Here is a utility class which implements two methods for resizing an image and saves the result to another image file.
package net.codejava.graphic;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* This program demonstrates how to resize an image.
*
* @author www.codejava.net
*
*/
public class ImageResizer {
/**
* Resizes an image to a absolute width and height (the image may not be
* proportional)
* @param inputImagePath Path of the original image
* @param outputImagePath Path to save the resized image
* @param scaledWidth absolute width in pixels
* @param scaledHeight absolute height in pixels
* @throws IOException
*/
public static void resize(String inputImagePath,
String outputImagePath, int scaledWidth, int scaledHeight)
throws IOException {
// reads input image
File inputFile = new File(inputImagePath);
BufferedImage inputImage = ImageIO.read(inputFile);
// creates output image
BufferedImage outputImage = new BufferedImage(scaledWidth,
scaledHeight, inputImage.getType());
// scales the input image to the output image
Graphics2D g2d = outputImage.createGraphics();
g2d.drawImage(inputImage, 0, 0, scaledWidth, scaledHeight, null);
g2d.dispose();
// extracts extension of output file
String formatName = outputImagePath.substring(outputImagePath
.lastIndexOf(".") + 1);
// writes to output file
ImageIO.write(outputImage, formatName, new File(outputImagePath));
}
/**
* Resizes an image by a percentage of original size (proportional).
* @param inputImagePath Path of the original image
* @param outputImagePath Path to save the resized image
* @param percent a double number specifies percentage of the output image
* over the input image.
* @throws IOException
*/
public static void resize(String inputImagePath,
String outputImagePath, double percent) throws IOException {
File inputFile = new File(inputImagePath);
BufferedImage inputImage = ImageIO.read(inputFile);
int scaledWidth = (int) (inputImage.getWidth() * percent);
int scaledHeight = (int) (inputImage.getHeight() * percent);
resize(inputImagePath, outputImagePath, scaledWidth, scaledHeight);
}
/**
* Test resizing images
*/
public static void main(String[] args) {
String inputImagePath = "D:/Photo/Puppy.jpg";
String outputImagePath1 = "D:/Photo/Puppy_Fixed.jpg";
String outputImagePath2 = "D:/Photo/Puppy_Smaller.jpg";
String outputImagePath3 = "D:/Photo/Puppy_Bigger.jpg";
try {
// resize to a fixed width (not proportional)
int scaledWidth = 1024;
int scaledHeight = 768;
ImageResizer.resize(inputImagePath, outputImagePath1, scaledWidth, scaledHeight);
// resize smaller by 50%
double percent = 0.5;
ImageResizer.resize(inputImagePath, outputImagePath2, percent);
// resize bigger by 50%
percent = 1.5;
ImageResizer.resize(inputImagePath, outputImagePath3, percent);
} catch (IOException ex) {
System.out.println("Error resizing the image.");
ex.printStackTrace();
}
}
}Note:the resized images may not have same quality as the original ones.
Other Java Graphics Tutorials:
- How to add watermark for images using Java
- How to draw image with automatic scaling in Java
- How to convert image format using Java
- How to capture screenshot programmatically in Java
- How to draw text vertically with Java Graphics2D
- How to Create Zoomable User Interface Java Programs with Piccolo2D Framework
- Drawing lines examples with Java Graphics2D
- Drawing Rectangles Examples with Java Graphics2D
- Using JFreechart to draw line chart with CategoryDataset
- Using JFreechart to draw XY line chart with XYDataset
About the Author:
Nam Ha Minh is certified Java programmer (SCJP and SCWCD). He began programming with Java back in the days of Java 1.4 and has been passionate about it ever since. You can connect with him on Facebook and watch his Java videos on YouTube.
Comments
github.com/NoahOrtega/NMSVR-Screenshot-Fix