The example in this article describes the method of creating thumbnails and scaling image ratios in Java. Share it with everyone for your reference. The specific implementation method is as follows:
This instance supports scaling the width and height of the Image to the specified width and height, and saving it in the specified directory. The image reduction ratio is calculated based on the size of the target object and the standard (specified) size. The image scaling quality can be set, and the image scaling quality can be set according to the specified Scale the image in width and height.
The specific code is as follows:
Copy the code code as follows:
package com.hoo.util;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* <b>function:</b> Zoom image tool class, create thumbnails, stretch image proportions
*@authorhoojo
* @createDate 2012-2-3 10:08:47 AM
* @file ScaleImageUtils.java
* @package com.hoo.util
* @version 1.0
*/
public abstract class ScaleImageUtils {
private static final float DEFAULT_SCALE_QUALITY = 1f;
private static final String DEFAULT_IMAGE_FORMAT = ".jpg"; // Image file format
private static final String DEFAULT_FILE_PATH = "C:/temp-";
/**
* <b>function:</b> Set image compression quality enumeration class;
* Some guidelines: 0.75 high quality, 0.5 medium quality, 0.25 low quality
*@authorhoojo
* @createDate 2012-2-7 11:31:45 AM
* @file ScaleImageUtils.java
* @package com.hoo.util
* @project JQueryMobile
* @version 1.0
*/
public enum ImageQuality {
max(1.0f), high(0.75f), medium(0.5f), low(0.25f);
private Float quality;
public Float getQuality() {
return this.quality;
}
ImageQuality(Float quality) {
this.quality = quality;
}
}
private static Image image;
/**
* <b>function:</b> Calculate the image reduction ratio based on the size of the target object and the standard (specified) size
*@authorhoojo
* @createDate 2012-2-6 04:41:48 pm
* @param targetWidth The width of the target
* @param targetHeight the height of the target
* @param standardWidth standard (specified) width
* @param standardHeight standard (specified) height
* @return the smallest suitable ratio
*/
public static double getScaling(double targetWidth, double targetHeight, double standardWidth, double standardHeight) {
double widthScaling = 0d;
double heightScaling = 0d;
if (targetWidth > standardWidth) {
widthScaling = standardWidth / (targetWidth * 1.00d);
} else {
widthScaling = 1d;
}
if (targetHeight > standardHeight) {
heightScaling = standardHeight / (targetHeight * 1.00d);
} else {
heightScaling = 1d;
}
return Math.min(widthScaling, heightScaling);
}
/**
* <b>function:</b> Scale the width and height of the Image to the specified width and height, and save it in the savePath directory
*@authorhoojo
* @createDate 2012-2-6 04:54:35 PM
* @param width the width of scaling
* @param height zoom height
* @param savePath save directory
* @param targetImage The target image to be zoomed
* @return Image saving path and name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, int height, String savePath, Image targetImage) throws ImageFormatException, IOException {
width = Math.max(width, 1);
height = Math.max(height, 1);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = new FileOutputStream(new File(savePath));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(image);
image.flush();
fos.flush();
fos.close();
return savePath;
}
/**
* <b>function:</b> You can set the image scaling quality and scale the image according to the specified width and height.
*@authorhoojo
* @createDate 2012-2-7 11:01:27 AM
* @param width the width of scaling
* @param height zoom height
* @param quality Image compression quality, the maximum value is 1; use enumeration value: {@link ImageQuality}
* Some guidelines: 0.75 high quality, 0.5 medium quality, 0.25 low quality
* @param savePath save directory
* @param targetImage The target image to be zoomed
* @return Image saving path and name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, int height, Float quality, String savePath, Image targetImage) throws ImageFormatException, IOException {
width = Math.max(width, 1);
height = Math.max(height, 1);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = new FileOutputStream(new File(savePath));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(image);
if (quality == null || quality <= 0) {
quality = DEFAULT_SCALE_QUALITY;
}
/**Set image compression quality*/
encodeParam.setQuality(quality, true);
encoder.encode(image, encodeParam);
image.flush();
fos.flush();
fos.close();
return savePath;
}
/**
* <b>function:</b> Calculate the appropriate size for image reduction by specifying the size and the size of the image
*@authorhoojo
* @createDate 2012-2-6 05:53:10 PM
* @param width specified width
* @param height specified height
* @param image image file
* @return Returns the int array of width and height
*/
public static int[] getSize(int width, int height, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
double scaling = getScaling(targetWidth, targetHeight, width, height);
long standardWidth = Math.round(targetWidth * scaling);
long standardHeight = Math.round(targetHeight * scaling);
return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
/**
* <b>function:</b> Returns an enlarged or reduced width and height through the specified ratio and image object.
*@authorhoojo
* @createDate 2012-2-7 10:27:59 AM
* @param scale scaling ratio
* @param image image object
* @return Return width, height
*/
public static int[] getSize(float scale, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
long standardWidth = Math.round(targetWidth * scale);
long standardHeight = Math.round(targetHeight * scale);
return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
public static int[] getSize(int width, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
long height = Math.round((targetHeight * width) / (targetWidth * 1.00f));
return new int[] { width, Integer.parseInt(String.valueOf(height)) };
}
public static int[] getSizeByHeight(int height, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
long width = Math.round((targetWidth * height) / (targetHeight * 1.00f));
return new int[] { Integer.parseInt(String.valueOf(width)), height };
}
/**
*
* <b>function:</b> Reduce the width and height of the specified targetFile image file that are greater than the specified width and height, and save them in the savePath directory.
*@authorhoojo
* @createDate 2012-2-6 04:57:02 PM
* @param width reduced width
* @param height reduced height
* @param savePath save directory
* @param targetImage changed target image
* @return Image saving path and name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, int height, String savePath, File targetFile) throws ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(width, height, image);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>function:</b> Reduce the width and height of the specified targetURL network image file that are greater than the specified width and height, and save them in the savePath directory.
*@authorhoojo
* @createDate 2012-2-6 04:57:07 PM
* @param width reduced width
* @param height reduced height
* @param savePath save directory
* @param targetImage changed target image
* @return Image saving path and name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, int height, String savePath, URL targetURL) throws ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(width, height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>function:</b> Scale a local image file according to the specified ratio
*@authorhoojo
* @createDate 2012-2-7 10:29:18 AM
* @param scale scaling ratio
* @param savePath Save file path and name
* @param targetFile local image file
* @return new file name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(float scale, String savePath, File targetFile) throws ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(scale, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>function:</b> Scale a network image file according to the specified ratio
*@authorhoojo
* @createDate 2012-2-7 10:30:56 AM
* @param scale scaling ratio
* @param savePath Save file path and name
* @param targetFile local image file
* @return new file name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(float scale, String savePath, URL targetURL) throws ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(scale, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>function:</b> Scale local images proportionally according to a fixed width
*@authorhoojo
* @createDate 2012-2-7 10:49:56 AM
* @param width fixed width
* @param savePath save path, name
* @param targetFile local target file
* @return Returns the saving path
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, String savePath, File targetFile) throws ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(width, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>function:</b> Scale network images proportionally according to a fixed width
*@authorhoojo
* @createDate 2012-2-7 10:50:52 AM
* @param width fixed width
* @param savePath save path, name
* @param targetFile local target file
* @return Returns the saving path
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, String savePath, URL targetURL) throws ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(width, image);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>function:</b> Scale local images proportionally according to a fixed height
*@authorhoojo
* @createDate 2012-2-7 10:51:17 AM
* @param height fixed height
* @param savePath save path, name
* @param targetFile local target file
* @return Returns the saving path
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight(int height, String savePath, File targetFile) throws ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSizeByHeight(height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>function:</b> Scale network images proportionally according to a fixed height
*@authorhoojo
* @createDate 2012-2-7 10:52:23 AM
* @param height fixed height
* @param savePath save path and name
* @param targetFile local target file
* @return Returns the saving path
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight(int height, String savePath, URL targetURL) throws ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSizeByHeight(height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>function:</b>
*@authorhoojo
* @createDate 2012-2-3 10:08:47 AM
* @param args
* @throwsIOException
* @throws MalformedURLException
* @throws ImageFormatException
*/
public static void main(String[] args) throws ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, null, new URL("http://www.open-open.com/lib/images/logo.jpg")));
ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), null, ImageIO.read(new URL("http://www.open-open.com/lib/images/logo.jpg")));
}
}
I hope this article will be helpful to everyone’s Java programming.