Java applet – 以png格式保存图像

我正在为化身制作创建一个简单的小程序。 您可以选择脸部,头发,眼睛等,然后将其作为png文件保存到光盘中。 简单版本(没有用于简单目的的界面)看起来像这样:

import java.awt.*; import java.applet.*; import java.net.*; public class Example extends Applet { Image my_gif; Image my_gif2; URL base; MediaTracker mt; public void init() { mt = new MediaTracker(this); try { base = getDocumentBase(); } catch (Exception e) {} my_gif = getImage(base,"1.gif"); my_gif2 = getImage(base,"2.gif"); mt.addImage(my_gif,1); mt.addImage(my_gif2,2); try { mt.waitForAll(); } catch (InterruptedException e) {} } public void paint(Graphics g) { g.drawImage(my_gif,0,0,this); g.drawImage(my_gif2,0,0,this); } } 

此示例包含两个文件。 运行时,它们以正确的方式可见。 现在我想把它保存到光盘 – 我可以使用BufferedImage保存一个图像,但我想“压平”两个或多个图像并保存。 任何帮助将不胜感激。 我也同意,也许我的方法不是正确的,并且会对任何更正表示感谢。

注意快速编写和未经测试的代码!

基本概念是:您加载组合头像的图像,然后创建一个新的空图像并将头像的每个部分绘制到其上。 之后,您只需将新创建的图像保存到文件中。

重要说明:对于未签名的applet,getPath()方法将失败,导致AccessViolation。 我想FileChooser在这里会是更好的方法。

 import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import javax.imageio.ImageIO; public class Avatar { // Graphics private GraphicsConfiguration config = GraphicsEnvironment .getLocalGraphicsEnvironment().getDefaultScreenDevice() .getDefaultConfiguration(); private BufferedImage faceImage; private BufferedImage hairImage; private BufferedImage mouthImage; public Avatar(final String face, final String hair, final String mouth, final String out) { // Load the Image parts faceImage = load(face); hairImage = load(hair); mouthImage = load(mouth); // Combine the images BufferedImage outImage = combine(); // Save the new image try { ImageIO.write(outImage, "png", new File(getPath() + "screenshot.png")); } catch (IOException e) { } } // Combine private BufferedImage combine() { // Create an empty image BufferedImage buffer = create(200, 400, true); // Get the graphics context Graphics2D g = buffer.createGraphics(); // Draw all 3 images onto the empty one g.drawImage(faceImage, 0, 0, null); g.drawImage(hairImage, 0, 0, null); g.drawImage(mouthImage, 0, 0, null); // Get rid of the graphics context g.dispose(); return buffer; } // Image private URL getURL(final String filename) { URL url = Avatar.class.getResource(filename); return url; } private BufferedImage load(final String file) { URL filename = getURL(file); if (filename == null) { return null; } else { try { return ImageIO.read(filename); } catch (IOException e) { return null; } } } private BufferedImage create(final int width, final int height, final boolean alpha) { BufferedImage buffer = config.createCompatibleImage(width, height, alpha ? Transparency.TRANSLUCENT : Transparency.OPAQUE); return buffer; } // Path private final String getPath() { String path = currentPath(); if (currentPath().toLowerCase().endsWith(".jar")) { path = path.substring(0, path.lastIndexOf("/") + 1); } return path; } private String currentPath() { try { return this.getClass().getProtectionDomain().getCodeSource() .getLocation().toURI().getPath(); } catch (URISyntaxException e) { return ""; } } } 

这是帮助您编辑图像的代码

 Hope it helps you /*Arpana*/ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.awt.image.ConvolveOp; import java.awt.image.Kernel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.TitledBorder; public class ConvolveApp extends JFrame { CPanel displayPanel; JButton sharpenButton, blurringButton, edButton, resetButton; public ConvolveApp() { super(); Container container = getContentPane(); displayPanel = new CPanel(); container.add(displayPanel); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(2, 2)); panel .setBorder(new TitledBorder( "Click a Button to Perform the Associated Operation and Reset...")); sharpenButton = new JButton("Sharpen"); sharpenButton.addActionListener(new ButtonListener()); blurringButton = new JButton("Blur"); blurringButton.addActionListener(new ButtonListener()); edButton = new JButton("Edge Detect"); edButton.addActionListener(new ButtonListener()); resetButton = new JButton("Reset"); resetButton.addActionListener(new ButtonListener()); panel.add(sharpenButton); panel.add(blurringButton); panel.add(edButton); panel.add(resetButton); container.add(BorderLayout.SOUTH, panel); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //setSize(100,100); setSize(displayPanel.getWidth()+50, displayPanel.getHeight() ); setVisible(true); } public static void main(String arg[]) { new ConvolveApp(); } class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); if (button.equals(sharpenButton)) { displayPanel.sharpen(); displayPanel.repaint(); } else if (button.equals(blurringButton)) { displayPanel.blur(); displayPanel.repaint(); } else if (button.equals(edButton)) { displayPanel.edgeDetect(); displayPanel.repaint(); } else if (button.equals(resetButton)) { displayPanel.reset(); displayPanel.repaint(); } } } } class CPanel extends JLabel { Image displayImage; BufferedImage biSrc; BufferedImage biDest; // Destination image is mandetory. BufferedImage bi; // Only an additional reference. Graphics2D big; CPanel() { setBackground(Color.black); loadImage(); setSize(displayImage.getWidth(this), displayImage.getWidth(this)); createBufferedImages(); bi = biSrc; } public void loadImage() { displayImage = Toolkit.getDefaultToolkit().getImage("Desert.jpg"); MediaTracker mt = new MediaTracker(this); mt.addImage(displayImage, 1); try { mt.waitForAll(); } catch (Exception e) { System.out.println("Exception while loading."); } if (displayImage.getWidth(this) == -1) { System.out.println("No jpg file"); System.exit(0); } } public void createBufferedImages() { biSrc = new BufferedImage(displayImage.getWidth(this), displayImage .getHeight(this), BufferedImage.TYPE_INT_RGB); big = biSrc.createGraphics(); big.drawImage(displayImage, 0, 0, this); biDest = new BufferedImage(displayImage.getWidth(this), displayImage .getHeight(this), BufferedImage.TYPE_INT_RGB); } public void sharpen() { float data[] = { -1.0f, -1.0f, -1.0f, -1.0f, 9.0f, -1.0f, -1.0f, -1.0f, -1.0f }; Kernel kernel = new Kernel(3, 3, data); ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); convolve.filter(biSrc, biDest); bi = biDest; } public void blur() { float data[] = { 0.0625f, 0.125f, 0.0625f, 0.125f, 0.25f, 0.125f, 0.0625f, 0.125f, 0.0625f }; Kernel kernel = new Kernel(3, 3, data); ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); convolve.filter(biSrc, biDest); bi = biDest; } public void edgeDetect() { float data[] = { 1.0f, 0.0f, -1.0f, 1.0f, 0.0f, -1.0f, 1.0f, 0.0f, -1.0f }; Kernel kernel = new Kernel(3, 3, data); ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); convolve.filter(biSrc, biDest); bi = biDest; } public void reset() { big.setColor(Color.black); big.clearRect(0, 0, bi.getWidth(this), bi.getHeight(this)); big.drawImage(displayImage, 0, 0, this); bi = biSrc; } public void update(Graphics g) { g.clearRect(0, 0, getWidth(), getHeight()); paintComponent(g); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2D = (Graphics2D) g; g2D.drawImage(bi, 0, 0, this); } }