Skip to content

Instantly share code, notes, and snippets.

@wangshuai1992
Created May 29, 2018 08:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wangshuai1992/01eeb77e75b2a2e9b618183ffb242e79 to your computer and use it in GitHub Desktop.
Save wangshuai1992/01eeb77e75b2a2e9b618183ffb242e79 to your computer and use it in GitHub Desktop.
ImageUtils.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
/**
* 图片工具类
*/
public class ImageUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(ImageUtils.class);
private static String DEFAULT_PREVFIX = "thumb_";
private static Boolean DEFAULT_FORCE = false;
/**
* <p>Title: thumbnailImage</p>
* <p>Description: 根据图片路径生成缩略图 </p>
*
* @param path 缩略图路径
* @param imgFile 原图片
* @param w 缩略图宽
* @param h 缩略图高
* @param prevfix 生成缩略图的前缀
* @param force 是否强制按照宽高生成缩略图(如果为false,则生成最佳比例缩略图)
*/
public static boolean thumbnailImage(String path, File imgFile, int w, int h, String prevfix, boolean force) {
if (imgFile.exists()) {
try {
// ImageIO 支持的图片类型 : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
String types = Arrays.toString(ImageIO.getReaderFormatNames());
String suffix = null;
// 获取图片后缀
if (imgFile.getName().contains(".")) {
suffix = imgFile.getName().substring(imgFile.getName().lastIndexOf(".") + 1);
}
// 类型和图片后缀全部小写,然后判断后缀是否合法
if (suffix == null || !types.toLowerCase().contains(suffix.toLowerCase())) {
LOGGER.error("Sorry, the image suffix is illegal. the standard image suffix is {}." + types);
return false;
}
LOGGER.debug("target image's size, width:{}, height:{}.", w, h);
Image img = ImageIO.read(imgFile);
if (!force) {
// 根据原图与要求的缩略图比例,找到最合适的缩略图比例
int width = img.getWidth(null);
int height = img.getHeight(null);
if ((width * 1.0) / w < (height * 1.0) / h) {
if (width > w) {
h = Integer.parseInt(new java.text.DecimalFormat("0").format(height * w / (width * 1.0)));
LOGGER.debug("change image's height, width:{}, height:{}.", w, h);
}
} else {
if (height > h) {
w = Integer.parseInt(new java.text.DecimalFormat("0").format(width * h / (height * 1.0)));
LOGGER.debug("change image's width, width:{}, height:{}.", w, h);
}
}
}
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
g.drawImage(img, 0, 0, w, h, Color.LIGHT_GRAY, null);
g.dispose();
String p = imgFile.getPath();
int position = path.lastIndexOf("/");
File file = new File(path.substring(0, position));
if (!file.exists()) {
file.mkdirs();
}
// 将图片保存在原目录并加上前缀
ImageIO.write(bi, suffix, new File(path));
return true;
} catch (IOException e) {
LOGGER.error("generate thumbnail image failed.", e);
return false;
}
} else {
LOGGER.warn("the image is not exist.");
return false;
}
}
public static Boolean thumbnailImage(String viewPath, String imagePath, int w, int h, String prevfix, boolean force) {
File imgFile = new File(imagePath);
return thumbnailImage(viewPath, imgFile, w, h, prevfix, force);
}
public static Boolean thumbnailImage(String viewPath, String imagePath, int w, int h, boolean force) {
return thumbnailImage(viewPath, imagePath, w, h, DEFAULT_PREVFIX, force);
}
public static Boolean thumbnailImage(String viewPath, String imagePath, int w, int h) {
return thumbnailImage(viewPath, imagePath, w, h, DEFAULT_FORCE);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment