Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法和png_Java_Image Processing - Fatal编程技术网

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,带有一些透明区域。。