一 获取网络图片并转成流
/**
* 获取网络图
*
* @param url
* @return
*/
public static BufferedImage downloadImage(String url) throws Exception {
log.info("下载网络图片:" + url);
byte[] bytes = HttpsUtils.getBytes(url);
InputStream buffin = new ByteArrayInputStream(bytes, 0, bytes.length);
bytes = null;
BufferedImage result = ImageIO.read(buffin);
return result;
}
二 对图片进行指定宽高的编辑
/**
* 图片拉伸缩放
*
* @param source 图片源 (为优化内存,原图将会关闭。保留最新的指针)
* @param width 宽-像素
* @param height 高-像素
* @return 拉伸后的图片
*/
public static BufferedImage stretchImage(BufferedImage source, int width, int height) {
log.info("图片拉伸-开始");
BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics graphics = result.getGraphics();
try {
graphics.drawImage(
source.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
} catch (Exception e) {
log.error("图片拉伸-异常", e);
throw new CommonException("图片拉伸-异常");
} finally {
graphics.dispose();
source.flush();
}
log.info("图片拉伸-结束");
return result;
}
三 对图片进行一定比例的编辑
编辑参数实体
@Data
public class ImageStretchEdit {
/**
* 拉伸比例
*/
private Float ratio;
/**
* 拉伸宽度
*/
private Integer width;
/**
* 拉伸高度
*/
private Integer height;
public ImageStretchEdit() {
}
public ImageStretchEdit(Float ratio) {
this.ratio = ratio;
}
}
编辑方法
/**
* 图片拉伸缩放
*
* @param source 图片源 (为优化内存,原图将会关闭。保留最新的指针)
* @return 拉伸后的图片
*/
public static BufferedImage stretchImage(BufferedImage source, ImageStretchEdit imageStretchEdit) {
log.info("图片拉伸缩放-" + JSONObject.toJSONString(imageStretchEdit));
Float ratio = imageStretchEdit.getRatio();
if (ratio != null) {
if (ratio == 1) {
log.info("图片拉伸缩放-比例1直接返回");
return source;
}
return stretchImage(source, Math.round(source.getWidth() * ratio), Math.round(source.getHeight() * ratio));
}
return stretchImage(source, imageStretchEdit.getWidth(), imageStretchEdit.getHeight());
}