修复图片操作未调用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); imgWidth = logoImg.getWidth(null) * imgHeight / logoImg.getHeight(null);
} }
// 原图片上直接绘制水印
Img.from(this).pressImage(// Img.from(this).pressImage(//
Img.from(logoImg).round(config.imgRound).getImg(), // 圆角 Img.from(logoImg).round(config.imgRound).getImg(), // 圆角
new Rectangle(imgWidth, imgHeight), // 位置 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 pressImg 水印图片可以使用{@link ImageIO#read(File)}方法读取文件
* @param rectangle 矩形对象表示矩形区域的xywidthheightx,y从背景图片中心计算 * @param rectangle 矩形对象表示矩形区域的xywidthheightx,y从背景图片中心计算

View File

@ -52,29 +52,29 @@ public class ImgUtil {
// region ----- [const] image type // 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 // endregion
// region ----- scale // region ----- scale
@ -100,16 +100,16 @@ public class ImgUtil {
* 缩放图像按比例缩放<br> * 缩放图像按比例缩放<br>
* 缩放后默认为jpeg格式此方法并不关闭流 * 缩放后默认为jpeg格式此方法并不关闭流
* *
* @param srcStream 源图像来源流 * @param srcStream 源图像来源流
* @param destStream 缩放后的图像写出到的流 * @param targetStream 缩放后的图像写出到的流
* @param scale 缩放比例比例大于1时为放大小于1大于0为缩小 * @param scale 缩放比例比例大于1时为放大小于1大于0为缩小
* @since 3.0.9 * @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; BufferedImage image = null;
try { try {
image = read(srcStream); image = read(srcStream);
scale(image, destStream, scale); scale(image, targetStream, scale);
} finally { } finally {
flush(image); flush(image);
} }
@ -229,15 +229,21 @@ public class ImgUtil {
* 缩放图像按高度和宽度缩放<br> * 缩放图像按高度和宽度缩放<br>
* 缩放后默认为jpeg格式此方法并不关闭流 * 缩放后默认为jpeg格式此方法并不关闭流
* *
* @param srcStream 源图像流 * @param srcStream 源图像流
* @param destStream 缩放后的图像目标流 * @param targetStream 缩放后的图像目标流
* @param width 缩放后的宽度 * @param width 缩放后的宽度
* @param height 缩放后的高度 * @param height 缩放后的高度
* @param fixedColor 比例不对时补充的颜色不补充为{@code null} * @param fixedColor 比例不对时补充的颜色不补充为{@code null}
* @throws IORuntimeException IO异常 * @throws IORuntimeException IO异常
*/ */
public static void scale(final InputStream srcStream, final OutputStream destStream, final int width, final int height, final Color fixedColor) throws IORuntimeException { public static void scale(final InputStream srcStream, final OutputStream targetStream, final int width, final int height, final Color fixedColor) throws IORuntimeException {
scale(read(srcStream), getImageOutputStream(destStream), width, height, fixedColor); 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> * 缩放图像按高度和宽度缩放<br>
* 缩放后默认为jpeg格式此方法并不关闭流 * 缩放后默认为jpeg格式此方法并不关闭流
* *
* @param srcImage 源图像 * @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param destImageStream 缩放后的图像目标流 * @param targetImageStream 缩放后的图像目标流
* @param width 缩放后的宽度 * @param width 缩放后的宽度
* @param height 缩放后的高度 * @param height 缩放后的高度
* @param fixedColor 比例不对时补充的颜色不补充为{@code null} * @param fixedColor 比例不对时补充的颜色不补充为{@code null}
* @throws IORuntimeException IO异常 * @throws IORuntimeException IO异常
*/ */
public static void scale(final Image srcImage, final ImageOutputStream destImageStream, final int width, final int height, final Color fixedColor) throws IORuntimeException { 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), destImageStream); writeJpg(scale(srcImage, width, height, fixedColor), targetImageStream);
} }
/** /**
* 缩放图像按高度和宽度缩放<br> * 缩放图像按高度和宽度缩放<br>
* 缩放后默认为jpeg格式 * 缩放后默认为jpeg格式
* *
* @param srcImage 源图像 * @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param width 缩放后的宽度 * @param width 缩放后的宽度
* @param height 缩放后的高度 * @param height 缩放后的高度
* @param fixedColor 比例不对时补充的颜色不补充为{@code null} * @param fixedColor 比例不对时补充的颜色不补充为{@code null}
@ -297,15 +303,15 @@ public class ImgUtil {
* 图像切割(按指定起点坐标和宽高切割) * 图像切割(按指定起点坐标和宽高切割)
* *
* @param srcImgFile 源图像文件 * @param srcImgFile 源图像文件
* @param destImgFile 切片后的图像文件 * @param targetImgFile 切片后的图像文件
* @param rectangle 矩形对象表示矩形区域的xywidthheight * @param rectangle 矩形对象表示矩形区域的xywidthheight
* @since 3.1.0 * @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; BufferedImage image = null;
try { try {
image = read(srcImgFile); image = read(srcImgFile);
cut(image, destImgFile, rectangle); cut(image, targetImgFile, rectangle);
} finally { } finally {
flush(image); flush(image);
} }
@ -742,15 +748,15 @@ public class ImgUtil {
* 此方法并不关闭流 * 此方法并不关闭流
* *
* @param srcStream 源图像流 * @param srcStream 源图像流
* @param destStream 目标图像流 * @param targetStream 目标图像流
* @param imageType 图片格式(扩展名) * @param imageType 图片格式(扩展名)
* @since 4.0.5 * @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; BufferedImage image = null;
try { try {
image = read(srcStream); image = read(srcStream);
binary(image, getImageOutputStream(destStream), imageType); binary(image, getImageOutputStream(targetStream), imageType);
} finally { } finally {
flush(image); flush(image);
} }
@ -778,7 +784,7 @@ public class ImgUtil {
/** /**
* 彩色转为黑白二值化图片根据目标文件扩展名确定转换后的格式 * 彩色转为黑白二值化图片根据目标文件扩展名确定转换后的格式
* *
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源 * @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param outFile 目标文件 * @param outFile 目标文件
* @since 4.0.5 * @since 4.0.5
*/ */
@ -790,7 +796,7 @@ public class ImgUtil {
* 彩色转为黑白二值化图片<br> * 彩色转为黑白二值化图片<br>
* 此方法并不关闭流输出JPG格式 * 此方法并不关闭流输出JPG格式
* *
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源 * @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param out 目标图像流 * @param out 目标图像流
* @param imageType 图片格式(扩展名) * @param imageType 图片格式(扩展名)
* @since 4.0.5 * @since 4.0.5
@ -803,7 +809,7 @@ public class ImgUtil {
* 彩色转为黑白二值化图片<br> * 彩色转为黑白二值化图片<br>
* 此方法并不关闭流输出JPG格式 * 此方法并不关闭流输出JPG格式
* *
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源 * @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @param targetImageStream 目标图像流 * @param targetImageStream 目标图像流
* @param imageType 图片格式(扩展名) * @param imageType 图片格式(扩展名)
* @throws IORuntimeException IO异常 * @throws IORuntimeException IO异常
@ -816,7 +822,7 @@ public class ImgUtil {
/** /**
* 彩色转为黑白二值化图片 * 彩色转为黑白二值化图片
* *
* @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源 * @param srcImage 源图像使用结束后需手动调用{@link #flush(Image)}释放资源
* @return {@link Image}二值化后的图片 * @return {@link Image}二值化后的图片
* @since 4.0.5 * @since 4.0.5
*/ */