fix image type bug

This commit is contained in:
Looly 2020-10-31 10:05:33 +08:00
parent 80dd13773a
commit 46635600b5

View File

@ -398,10 +398,10 @@ public class ImgUtil {
int srcWidth = srcImage.getWidth(null); // 源图宽度 int srcWidth = srcImage.getWidth(null); // 源图宽度
int srcHeight = srcImage.getHeight(null); // 源图高度 int srcHeight = srcImage.getHeight(null); // 源图高度
if(srcWidth < destWidth){ if (srcWidth < destWidth) {
destWidth = srcWidth; destWidth = srcWidth;
} }
if(srcHeight < destHeight){ if (srcHeight < destHeight) {
destHeight = srcHeight; destHeight = srcHeight;
} }
@ -1123,7 +1123,7 @@ public class ImgUtil {
/** /**
* {@link Image} {@link RenderedImage}<br> * {@link Image} {@link RenderedImage}<br>
* 首先尝试强转否则新建一个{@link BufferedImage}后重新绘制 * 首先尝试强转否则新建一个{@link BufferedImage}后重新绘制使用 {@link BufferedImage#TYPE_INT_RGB} 模式
* *
* @param img {@link Image} * @param img {@link Image}
* @return {@link BufferedImage} * @return {@link BufferedImage}
@ -1139,7 +1139,7 @@ public class ImgUtil {
/** /**
* {@link Image} {@link BufferedImage}<br> * {@link Image} {@link BufferedImage}<br>
* 首先尝试强转否则新建一个{@link BufferedImage}后重新绘制 * 首先尝试强转否则新建一个{@link BufferedImage}后重新绘制使用 {@link BufferedImage#TYPE_INT_RGB} 模式
* *
* @param img {@link Image} * @param img {@link Image}
* @return {@link BufferedImage} * @return {@link BufferedImage}
@ -1154,27 +1154,39 @@ public class ImgUtil {
/** /**
* {@link Image} {@link BufferedImage}<br> * {@link Image} {@link BufferedImage}<br>
* 如果源图片的RGB模式与目标模式一致则直接转换否则重新绘制 * 如果源图片的RGB模式与目标模式一致则直接转换否则重新绘制<br>
* 默认的png图片使用 {@link BufferedImage#TYPE_INT_ARGB}模式其它使用 {@link BufferedImage#TYPE_INT_RGB} 模式
* *
* @param image {@link Image} * @param image {@link Image}
* @param imageType 目标图片类型 * @param imageType 目标图片类型例如jpg或png等
* @return {@link BufferedImage} * @return {@link BufferedImage}
* @since 4.3.2 * @since 4.3.2
*/ */
public static BufferedImage toBufferedImage(Image image, String imageType) { 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}<br>
* 如果源图片的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; BufferedImage bufferedImage;
if (false == imageType.equalsIgnoreCase(IMAGE_TYPE_PNG)) {
// 当目标为非PNG类图片时源图片统一转换为RGB格式
if (image instanceof BufferedImage) { if (image instanceof BufferedImage) {
bufferedImage = (BufferedImage) image; bufferedImage = (BufferedImage) image;
if (BufferedImage.TYPE_INT_RGB != bufferedImage.getType()) { if (imageType != bufferedImage.getType()) {
bufferedImage = copyImage(image, BufferedImage.TYPE_INT_RGB); bufferedImage = copyImage(image, imageType);
} }
} else { } else {
bufferedImage = copyImage(image, BufferedImage.TYPE_INT_RGB); bufferedImage = copyImage(image, imageType);
}
} else {
bufferedImage = toBufferedImage(image);
} }
return bufferedImage; return bufferedImage;
} }