Java 方法和png
为什么Java 方法和png,java,image-processing,Java,Image Processing,为什么ImageIO.write(bufferedimage_dest,“png”,新文件(filedest))写入jpg(不带透明颜色)文件而不是png 添加: static BufferedImage createResizedCopy(Image originalImage, int scaledWidth, int scaledHeight, boolean preserveAlpha) { Sy
ImageIO.write(bufferedimage_dest,“png”,新文件(filedest))代码>写入jpg(不带透明颜色)文件而不是png
添加:
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));
}
添加:
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));
}
在main()函数中,我调用了
ScaleJPG.scale((args[0],Integer.parseInt(args[1]),Integer.parseInt(args[2]), args[3]););
而不是
ScalePNG.scale((args[0],Integer.parseInt(args[1]),Integer.parseInt(args[2]), args[3]););
ScaleJPG与此文件夹中的上一个类类似
我必须放弃记事本,只使用IDE。
要删除的问题。您需要缓冲图像的图像类型为它不需要的图像类型。这个简单的测试类验证它:
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"));
}
}
编译并执行它会生成一个.png文件,正如预期的那样:
$ javac Main.java
$ java Main
$ file test.png
test.png: PNG image, 100 x 100, 8-bit/color RGBA, non-interlaced
$
$javac Main.java
$java Main
$file test.png
test.png:png图像,100 x 100,8位/彩色RGBA,非隔行扫描
$
加
在g.drawImage之前(originalImage,0,0,scaledWidth,scaledHeight,null)
到createResizedCopy
函数。JPG不支持透明性。你能显示你的filedest变量吗?我添加了,但仍然是同一个jpg。我已经用添加的那行代码测试了你的代码,它对我有效<代码>比例(“test.png”,100100,“test_resized.png”)代码>。。确保正确传递参数。。还有一件事,my test.png,带有一些透明区域。。