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"));
}
}
我正在使用 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"));
}
}