Created
May 29, 2018 08:00
-
-
Save wangshuai1992/01eeb77e75b2a2e9b618183ffb242e79 to your computer and use it in GitHub Desktop.
ImageUtils.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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