/**
*
Title: thumbnailImage
*
Description: 根据图片路径生成缩略图
*
* @param imgFile 图片
* @param w 缩略图宽
* @param h 缩略图高
* @param prevfix 生成缩略图的前缀
* @param force 是否强制按照宽高生成缩略图(如果为false,则生成最佳比例缩略图)
*/
public InputStream thumbnailImage(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().indexOf(".") > -1) {
suffix = imgFile.getName().substring(imgFile.getName().lastIndexOf(".") + 1);
}// 类型和图片后缀全部小写,然后判断后缀是否合法
if (suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase()) < 0) {
log.error("Sorry, the image suffix is illegal. the standard image suffix is {}." + types);
return null;
}
log.info("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)));
log.info("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)));
log.info("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();
// 将图片保存在原目录并加上前缀
//String newFileName = p.substring(0, p.lastIndexOf(File.separator)) + File.separator + prevfix + imgFile.getName();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", os);
InputStream input = new ByteArrayInputStream(os.toByteArray());
log.info("缩略图InputStream生成成功");
return input;
} catch (IOException e) {
log.error("generate thumbnail image failed.", e);
}
} else {
log.warn("the thumbnailImage is not exist.");
}
return null;
}
BufferedImage bufferedImage = ImageIO.read(new URL(url));//报错 Can’t get input stream from URL!
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, “jpg”, bos);
InputStream ins = new ByteArrayInputStream(bos.toByteArray());
获取图片url 变成InputStream 进行生成缩略图是 如果 图片的url 是https
报错 Can’t get input stream from URL!
if (url.contains("https")) {
url = url.replaceFirst("https", "http");
}
HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();
httpUrl.connect();
ins = httpUrl.getInputStream();
如果直接用 HttpURLConnection 连接 图片的https 会因为没有SSL 报错 从DNS 获取不到对应的域名
可转成http进行解决;
’