ImageIO.在Java中编写一个只有png功能的镜像



我使用ImageIO将镜像写入本地文件。但是,我发现只有将镜像文件写入png文件才能创建镜像文件。请注意,原始图像为jpg格式。如果我改变ImageIO。将格式写入"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"));
}

}

最新更新