Java applet - saving an image in a png format

后端 未结 2 351
一整个雨季
一整个雨季 2021-01-25 21:36

I am creating a simple applet for avatar-making. You can choose face, hair, eyes, etc and then save it to a disc as a png file. The simple version (without the interface for the

相关标签:
2条回答
  • 2021-01-25 22:23

    Beware quickly written and untested code!

    The basic concept is this: You load the images from which you combine the avatar, then you create a new empty image and draw each part of the avatar onto it. After that you just save the newly created image to a file.

    Important note: The getPath() Method will fail for unsigned applets cause of a AccessViolation. I suppose a FileChooser would be a better approach here.

    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 "";
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-25 22:37

    here is the code that help u to edit images

    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);
      }
    }
    
    0 讨论(0)
提交回复
热议问题