ImageIO.write 仅在 Java 中使用 png 的镜像

ImageIO.write a mirrored image only functional in png in Java

我正在使用 ImageIO 将镜像写入本地文件。但是,我发现只有将图像写入 png 文件时才会创建镜像文件。请注意,原始图像为 jpg 格式。如果我将 ImageIO.write 格式更改为“jpg”或“png”以外的某些格式,则不会创建图像文件。

BufferedImage image = null;
URL url = null;
String link = "http://www.fullerton.edu/_resources/images/empowerment-james.jpg";
try {

    url = new URL(link);
    image = ImageIO.read(url);
    width = image.getWidth();
    height = image.getHeight();

    BufferedImage mirror = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    for (int y = 0; y < height; y++) {
        for (int lx = 0, rx = width - 1; lx < width; lx++, rx--) {
            int lp = image.getRGB(lx, y);

            mirror.setRGB(rx, y, lp);

        }
    }
    JFrame frame2 = new JFrame();
    frame2.setSize(width + offset, height + offset);
    JLabel label2 = new JLabel(new ImageIcon(mirror));
    frame2.add(label2);
    frame2.setVisible(true);
    file = new File("mirror.png");

    ImageIO.write(mirror, "png", file);
} catch (IOException e) {
    System.out.println(e.getMessage());
}

所以,请注意,并非所有图像格式都支持透明度(即 BufferedImage.TYPE_INT_ARGB),因此,请确保您确实知道文件的写入位置,它可能会“出现”,因为它没有被写入,但它可能会被写入您意想不到的地方。

所以,下面的例子工作得很好,注意文件末尾的输出,它告诉目录图像被写入。

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Main {
    public static void main(String[] args) {
        try {
            new Main();
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public Main() throws MalformedURLException, IOException {
        BufferedImage original = ImageIO.read(new URL("http://www.fullerton.edu/_resources/images/empowerment-james.jpg"));
        BufferedImage mirrored = new BufferedImage(original.getWidth(), original.getHeight(), original.getTransparency());
        Graphics2D g2d = mirrored.createGraphics();
        g2d.setTransform(AffineTransform.getScaleInstance(-1, 1));
        g2d.drawImage(original, -original.getWidth(), 0, null);
        g2d.dispose();

        JPanel panel = new JPanel();
        panel.add(new JLabel(new ImageIcon(original)));
        panel.add(new JLabel(new ImageIcon(mirrored)));

        JOptionPane.showMessageDialog(null, panel);

        System.out.println("Writing to " + System.getProperty("user.dir"));

        ImageIO.write(mirrored, "png", new File("Test.png"));
        ImageIO.write(mirrored, "jpg", new File("Test.jpg"));
    }


}