今天遇到的两个问题:

java 的图片BufferedImage方式缩小后有严重色差/严重偏红怎么办_BufferedImage偏红


java 的图片BufferedImage方式缩小后有严重色差/严重偏红怎么办_BufferedImage偏红_02


图片本如图1所示,

java处理后,变成了图2所示,严重失真,偏红,怎么办?


以上直接上关键代码:

原来处理的代码:

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class BufferedImageTool {

public static void resize(String imgPath, double factor) throws IOException {

File file = new File(imgPath);
BufferedImage bufferedImage = ImageIO.read(file);

int width = (int) (bufferedImage.getWidth() * factor);
int height = (int) (bufferedImage.getHeight() *factor);

BufferedImage bufferedImage1 = resize(bufferedImage, width, height);


File outfile = new File("image.jpg");
ImageIO.write(bufferedImage1, "jpg", outfile);
}


/**
*/
public static BufferedImage resize(BufferedImage img, int newW, int newH) {
Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);

Graphics2D g2d = dimg.createGraphics();
g2d.drawImage(tmp, 0, 0, null);
g2d.dispose();

return dimg;
}

}

后来找到了一个库,效果非常好,处理完后的图片大小比图2还稍微小一点。

但却没有色差,几乎跟原图完全一样,效果很好。

java 的图片BufferedImage方式缩小后有严重色差/严重偏红怎么办_Image偏红_03


直接上代码,

依赖 ​​thumbnailator​​库。

 <!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.14</version>
</dependency>

上代码:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import net.coobird.thumbnailator.Thumbnails;

/**
*
*/
public class ThumbnailsTool {


public static void resize(String imgPath, double factor) throws IOException {

File localTempFile = new File(imgPath);

BufferedImage bufferedImage = ImageIO.read(localTempFile);
int width = (int) (bufferedImage.getWidth() * factor);
int height = (int) (bufferedImage.getHeight() * factor);

// BufferedImage 第三方库压缩图片画幅。JDK自带的会有严重色差
Thumbnails.of(localTempFile)
.size(width, height)
.outputFormat("jpg")
.toFile(new File("image2.jpg"));

}

}

入口Main函数:

import image.ImageHelper;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.UUID;
import net.coobird.thumbnailator.Thumbnails;

public class Starter {

public static void main(String[] args) throws IOException, URISyntaxException {

String imageUrl = "D:\\MyJava\\java-image\\sky.jpg";

//1. BufferedImage的形式处理
BufferedImageTool.resize(imageUrl, 0.5);

//2. Thumbnails 方式的处理
ThumbnailsTool.resize(imageUrl, 0.5);
}
}

产生的文件截图如下:

java 的图片BufferedImage方式缩小后有严重色差/严重偏红怎么办_BufferedImage失真_04

源码这里有: ​​https://gitee.com/codejam_org/java-image​