【发布时间】:2016-06-20 17:45:31
【问题描述】:
我有这个代码。它只是读取一个 GIF 文件,用背景重新绘制它,然后输出到一个新的 GIF 文件。
问题是结果文件变得奇怪。我不知道为什么它会变得质量差。该问题不会发生在 JPG 文件上。如何解决?
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageTest {
public static void main(String[] args) {
f();
}
private static final String EXTENSION = "gif";
private static final String FILENAME = "pinkHeart";
private static final String PATH = "/Users/hieugioi/Downloads/";
public static void f() {
File file = new File(PATH + FILENAME + "." + EXTENSION);
try {
final BufferedImage originalImage = ImageIO.read(file);
int imageType = getImageType(originalImage);
final BufferedImage buff = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), imageType);
final Graphics2D g = buff.createGraphics();
Color backgroundColor = Color.GRAY;
g.setColor(backgroundColor);
g.fill(new Rectangle(0, 0, buff.getWidth(), buff.getHeight()));
g.drawImage(originalImage, null, 0, 0);
File out = new File(PATH + FILENAME + "Out." + EXTENSION);
ImageIO.write(buff, EXTENSION, out);
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getImageType(BufferedImage img) {
int imageType = img.getType();
if (imageType == BufferedImage.TYPE_CUSTOM) {
if (img.getAlphaRaster() != null) {
imageType = BufferedImage.TYPE_INT_ARGB_PRE;
} else {
imageType = BufferedImage.TYPE_INT_RGB;
}
} else if (imageType == BufferedImage.TYPE_BYTE_INDEXED && img.getColorModel().hasAlpha()) {
imageType = BufferedImage.TYPE_INT_ARGB_PRE;
}
return imageType;
}
}
输入图片(pinkHeart.gif):
输出图片(pinkHeartOut.gif):
更新案例 2
输入图片(example.gif):
输出图像(exampleOut.gif):输出的黄色完全消失!
【问题讨论】:
-
输出是不是也漏掉了灰色背景?
标签: java gif javax.imageio