diff --git a/hutool-core/src/main/java/cn/hutool/core/img/ImgUtil.java b/hutool-core/src/main/java/cn/hutool/core/img/ImgUtil.java
index feff1e0e1..5e357c33b 100644
--- a/hutool-core/src/main/java/cn/hutool/core/img/ImgUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/img/ImgUtil.java
@@ -61,12 +61,12 @@ public class ImgUtil {
public static final String IMAGE_TYPE_BMP = "bmp";// 英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式
public static final String IMAGE_TYPE_PNG = "png";// 可移植网络图形
public static final String IMAGE_TYPE_PSD = "psd";// Photoshop的专用格式Photoshop
-
+
/**
* RGB颜色范围上限
*/
private static final int RGB_COLOR_BOUND = 256;
-
+
// ---------------------------------------------------------------------------------------------------------------------- scale
@@ -398,10 +398,10 @@ public class ImgUtil {
int srcWidth = srcImage.getWidth(null); // 源图宽度
int srcHeight = srcImage.getHeight(null); // 源图高度
- if(srcWidth < destWidth){
+ if (srcWidth < destWidth) {
destWidth = srcWidth;
}
- if(srcHeight < destHeight){
+ if (srcHeight < destHeight) {
destHeight = srcHeight;
}
@@ -1123,7 +1123,7 @@ public class ImgUtil {
/**
* {@link Image} 转 {@link RenderedImage}
- * 首先尝试强转,否则新建一个{@link BufferedImage}后重新绘制
+ * 首先尝试强转,否则新建一个{@link BufferedImage}后重新绘制,使用 {@link BufferedImage#TYPE_INT_RGB} 模式。
*
* @param img {@link Image}
* @return {@link BufferedImage}
@@ -1139,7 +1139,7 @@ public class ImgUtil {
/**
* {@link Image} 转 {@link BufferedImage}
- * 首先尝试强转,否则新建一个{@link BufferedImage}后重新绘制
+ * 首先尝试强转,否则新建一个{@link BufferedImage}后重新绘制,使用 {@link BufferedImage#TYPE_INT_RGB} 模式
*
* @param img {@link Image}
* @return {@link BufferedImage}
@@ -1154,27 +1154,39 @@ public class ImgUtil {
/**
* {@link Image} 转 {@link BufferedImage}
- * 如果源图片的RGB模式与目标模式一致,则直接转换,否则重新绘制
+ * 如果源图片的RGB模式与目标模式一致,则直接转换,否则重新绘制
+ * 默认的,png图片使用 {@link BufferedImage#TYPE_INT_ARGB}模式,其它使用 {@link BufferedImage#TYPE_INT_RGB} 模式
*
* @param image {@link Image}
- * @param imageType 目标图片类型
+ * @param imageType 目标图片类型,例如jpg或png等
* @return {@link BufferedImage}
* @since 4.3.2
*/
public static BufferedImage toBufferedImage(Image image, String imageType) {
+ final int type = imageType.equalsIgnoreCase(IMAGE_TYPE_PNG)
+ ? BufferedImage.TYPE_INT_ARGB
+ : BufferedImage.TYPE_INT_RGB;
+ return toBufferedImage(image, type);
+ }
+
+ /**
+ * {@link Image} 转 {@link BufferedImage}
+ * 如果源图片的RGB模式与目标模式一致,则直接转换,否则重新绘制
+ *
+ * @param image {@link Image}
+ * @param imageType 目标图片类型,{@link BufferedImage}中的常量,例如黑白等
+ * @return {@link BufferedImage}
+ * @since 5.4.7
+ */
+ public static BufferedImage toBufferedImage(Image image, int imageType) {
BufferedImage bufferedImage;
- if (false == imageType.equalsIgnoreCase(IMAGE_TYPE_PNG)) {
- // 当目标为非PNG类图片时,源图片统一转换为RGB格式
- if (image instanceof BufferedImage) {
- bufferedImage = (BufferedImage) image;
- if (BufferedImage.TYPE_INT_RGB != bufferedImage.getType()) {
- bufferedImage = copyImage(image, BufferedImage.TYPE_INT_RGB);
- }
- } else {
- bufferedImage = copyImage(image, BufferedImage.TYPE_INT_RGB);
+ if (image instanceof BufferedImage) {
+ bufferedImage = (BufferedImage) image;
+ if (imageType != bufferedImage.getType()) {
+ bufferedImage = copyImage(image, imageType);
}
} else {
- bufferedImage = toBufferedImage(image);
+ bufferedImage = copyImage(image, imageType);
}
return bufferedImage;
}