java ImageIO.write() 方法和 png
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5090902/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
ImageIO.write() method and png
提问by blue
Why ImageIO.write(bufferedimage_dest,"png",new File(filedest));
writes jpg (without transparency colour) file instead png?
为什么ImageIO.write(bufferedimage_dest,"png",new File(filedest));
写 jpg(没有透明颜色)文件而不是 png?
Added:
添加:
static BufferedImage createResizedCopy(Image originalImage,
int scaledWidth, int scaledHeight,
boolean preserveAlpha)
{
System.out.println("resizing...");
int imageType = preserveAlpha ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, imageType);
Graphics2D g = scaledBI.createGraphics();
if (preserveAlpha) {
g.setComposite(AlphaComposite.Src);
}
g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
g.dispose();
return scaledBI;
}
public static void scale(String src, int width, int height, String dest)
throws IOException {
BufferedImage bsrc = ImageIO.read(new File(src));
BufferedImage bdest =
new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
bdest = createResizedCopy(bsrc, width, height, false);
ImageIO.write(bdest,"png",new File(dest));
}
Added:
添加:
well, in main() function I've called
好吧,在我调用的 main() 函数中
ScaleJPG.scale((args[0],Integer.parseInt(args[1]),Integer.parseInt(args[2]), args[3]););
instead of
代替
ScalePNG.scale((args[0],Integer.parseInt(args[1]),Integer.parseInt(args[2]), args[3]););
ScaleJPG was similiar, previous class in this folder.
ScaleJPG 与此文件夹中的先前类类似。
I must discard notepad and use only IDE. Question to delete.
我必须丢弃记事本并仅使用 IDE。要删除的问题。
采纳答案by Serhiy
Add
添加
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
before g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
to the createResizedCopy
function.
之前g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
的createResizedCopy
功能。
回答by Bozho
You need your buffered image to have an image type of BufferedImage.TYPE_INT_ARGB
您需要缓冲图像的图像类型为 BufferedImage.TYPE_INT_ARGB
回答by Joachim Sauer
It does not. This simple test class verifies it:
它不是。这个简单的测试类验证了它:
import java.awt.image.*;
import java.io.File;
import javax.imageio.*;
public class Main
{
public static void main (String [] args) throws Exception
{
BufferedImage bi = new BufferedImage(100,100,BufferedImage.TYPE_INT_ARGB);
ImageIO.write(bi, "png", new File("test.png"));
}
}
Compiling and executing it produces a .png file just as expected:
正如预期的那样,编译并执行它会生成一个 .png 文件:
$ javac Main.java $ java Main $ file test.png test.png: PNG image, 100 x 100, 8-bit/color RGBA, non-interlaced $