修复图片操作未调用flush导致资源未释放问题

This commit is contained in:
Looly 2024-03-28 22:26:22 +08:00
parent 436b9199ef
commit 0358c3bde1
3 changed files with 51 additions and 43 deletions

View File

@ -86,6 +86,7 @@ public class QrImage extends BufferedImage {
imgWidth = logoImg.getWidth(null) * imgHeight / logoImg.getHeight(null);
}
// 原图片上直接绘制水印
Img.from(this).pressImage(//
Img.from(logoImg).round(config.imgRound).getImg(), // 圆角
new Rectangle(imgWidth, imgHeight), // 位置

View File

@ -586,7 +586,8 @@ public class Img implements Flushable, Serializable {
}
/**
* 给图片添加图片水印
* 给图片添加图片水印<br>
* 如果源图片对象为 {@link BufferedImage}则绘制在源图片上否则创建新的图片
*
* @param pressImg 水印图片可以使用{@link ImageIO#read(File)}方法读取文件
* @param rectangle 矩形对象表示矩形区域的xywidthheightx,y从背景图片中心计算

View File

@ -52,29 +52,29 @@ public class ImgUtil {
// region ----- [const] image type
/**
* GIF
* 图形交换格式GIF
*/
public static final String IMAGE_TYPE_GIF = "gif";// 图形交换格式
public static final String IMAGE_TYPE_GIF = "gif";
/**
* JPG
* 联合照片专家组JPG
*/
public static final String IMAGE_TYPE_JPG = "jpg";// 联合照片专家组
public static final String IMAGE_TYPE_JPG = "jpg";
/**
* JPEG
* 联合照片专家组JPEG
*/
public static final String IMAGE_TYPE_JPEG = "jpeg";// 联合照片专家组
public static final String IMAGE_TYPE_JPEG = "jpeg";
/**
* BMP
* 英文Bitmap位图的简写它是Windows操作系统中的标准图像文件格式BMP
*/
public static final String IMAGE_TYPE_BMP = "bmp";// 英文Bitmap位图的简写它是Windows操作系统中的标准图像文件格式
public static final String IMAGE_TYPE_BMP = "bmp";
/**
* PNG
* 可移植网络图形PNG
*/
public static final String IMAGE_TYPE_PNG = "png";// 可移植网络图形
public static final String IMAGE_TYPE_PNG = "png";
/**
* PSD
* Photoshop的专用格式PSD
*/
public static final String IMAGE_TYPE_PSD = "psd";// Photoshop的专用格式Photoshop
public static final String IMAGE_TYPE_PSD = "psd";
// endregion
// region ----- scale
@ -100,16 +100,16 @@ public class ImgUtil {
* 缩放图像按比例缩放<br>
* 缩放后默认为jpeg格式此方法并不关闭流
*
* @param srcStream 源图像来源流
* @param destStream 缩放后的图像写出到的流
* @param scale 缩放比例比例大于1时为放大小于1大于0为缩小
* @param srcStream 源图像来源流
* @param targetStream 缩放后的图像写出到的流
* @param scale 缩放比例比例大于1时为放大小于1大于0为缩小
* @since 3.0.9
*/
public static void scale(final InputStream srcStream, final OutputStream destStream, final float scale) {
public static void scale(final InputStream srcStream, final OutputStream targetStream, final float scale) {
BufferedImage image = null;
try {
image = read(srcStream);
scale(image, destStream, scale);
scale(image, targetStream, scale);
} finally {
flush(image);
}
@ -229,15 +229,21 @@ public class ImgUtil {
* 缩放图像按高度和宽度缩放<br>
* 缩放后默认为jpeg格式此方法并不关闭流
*
* @param srcStream 源图像流
* @param destStream 缩放后的图像目标流
* @param width 缩放后的宽度
* @param height 缩放后的高度
* @param fixedColor 比例不对时补充的颜色不补充为{@code null}
* @param srcStream 源图像流
* @param targetStream 缩放后的图像目标流
* @param width 缩放后的宽度
* @param height 缩放后的高度
* @param fixedColor 比例不对时补充的颜色不补充为{@code null}
* @throws IORuntimeException IO异常
*/
public static void scale(final InputStream srcStream, final OutputStream destStream, final int width, final int height, final Color fixedColor) throws IORuntimeException {
scale(read(srcStream), getImageOutputStream(destStream), width, height, fixedColor);
public static void scale(final InputStream srcStream, final OutputStream targetStream, final int width, final int height, final Color fixedColor) throws IORuntimeException {
BufferedImage image = null;
try {
image = read(srcStream);
scale(image, getImageOutputStream(targetStream), width, height, fixedColor);
} finally {
flush(image);
}
}
/**
@ -265,22 +271,22 @@ public class ImgUtil {
* 缩放图像按高度和宽度缩放<br>
* 缩放后默认为jpeg格式此方法并不关闭流
*
* @param srcImage 源图像
* @param destImageStream 缩放后的图像目标流
* @param width 缩放后的宽度
* @param height 缩放后的高度
* @param fixedColor 比例不对时补充的颜色不补充为{@code null}
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param targetImageStream 缩放后的图像目标流
* @param width 缩放后的宽度
* @param height 缩放后的高度
* @param fixedColor 比例不对时补充的颜色不补充为{@code null}
* @throws IORuntimeException IO异常
*/
public static void scale(final Image srcImage, final ImageOutputStream destImageStream, final int width, final int height, final Color fixedColor) throws IORuntimeException {
writeJpg(scale(srcImage, width, height, fixedColor), destImageStream);
public static void scale(final Image srcImage, final ImageOutputStream targetImageStream, final int width, final int height, final Color fixedColor) throws IORuntimeException {
writeJpg(scale(srcImage, width, height, fixedColor), targetImageStream);
}
/**
* 缩放图像按高度和宽度缩放<br>
* 缩放后默认为jpeg格式
*
* @param srcImage 源图像
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param width 缩放后的宽度
* @param height 缩放后的高度
* @param fixedColor 比例不对时补充的颜色不补充为{@code null}
@ -297,15 +303,15 @@ public class ImgUtil {
* 图像切割(按指定起点坐标和宽高切割)
*
* @param srcImgFile 源图像文件
* @param destImgFile 切片后的图像文件
* @param targetImgFile 切片后的图像文件
* @param rectangle 矩形对象表示矩形区域的xywidthheight
* @since 3.1.0
*/
public static void cut(final File srcImgFile, final File destImgFile, final Rectangle rectangle) {
public static void cut(final File srcImgFile, final File targetImgFile, final Rectangle rectangle) {
BufferedImage image = null;
try {
image = read(srcImgFile);
cut(image, destImgFile, rectangle);
cut(image, targetImgFile, rectangle);
} finally {
flush(image);
}
@ -742,15 +748,15 @@ public class ImgUtil {
* 此方法并不关闭流
*
* @param srcStream 源图像流
* @param destStream 目标图像流
* @param targetStream 目标图像流
* @param imageType 图片格式(扩展名)
* @since 4.0.5
*/
public static void binary(final InputStream srcStream, final OutputStream destStream, final String imageType) {
public static void binary(final InputStream srcStream, final OutputStream targetStream, final String imageType) {
BufferedImage image = null;
try {
image = read(srcStream);
binary(image, getImageOutputStream(destStream), imageType);
binary(image, getImageOutputStream(targetStream), imageType);
} finally {
flush(image);
}
@ -778,7 +784,7 @@ public class ImgUtil {
/**
* 彩色转为黑白二值化图片根据目标文件扩展名确定转换后的格式
*
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param outFile 目标文件
* @since 4.0.5
*/
@ -790,7 +796,7 @@ public class ImgUtil {
* 彩色转为黑白二值化图片<br>
* 此方法并不关闭流输出JPG格式
*
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param out 目标图像流
* @param imageType 图片格式(扩展名)
* @since 4.0.5
@ -803,7 +809,7 @@ public class ImgUtil {
* 彩色转为黑白二值化图片<br>
* 此方法并不关闭流输出JPG格式
*
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param targetImageStream 目标图像流
* @param imageType 图片格式(扩展名)
* @throws IORuntimeException IO异常
@ -816,7 +822,7 @@ public class ImgUtil {
/**
* 彩色转为黑白二值化图片
*
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @return {@link Image}二值化后的图片
* @since 4.0.5
*/