Frage

I'm getting images from clipboard using this:

if(Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(DataFlavor.imageFlavor)){
       ImageIcon IMG = new ImageIcon((BufferedImage) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.imageFlavor));
}

Now I want to save this image in disk using ImageIO.write;
How can I find image format (JPG,PNG,GIF,...) to use in ImageIO.write as formatName ?

Thanks

War es hilfreich?

Lösung

The mime type of the content of the clipboard when checked via

.isDataFlavorAvailable(DataFlavor.imageFlavor)

is image/x-java-image (but OS vendors do not need to follow MIME types for clipboards).

I found two ways to supposedly get an image from a clipboard and write it to a file:

  1. Using a helper method found in this blog post: The nightmares of getting images from the Mac OS X clipboard using Java.

    Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard()
    
    ImageIcon IMG = new ImageIcon((BufferedImage)    
    clip.getData(DataFlavor.imageFlavor));
    BufferedImage bImage = getBufferedImage(IMG.getImage());
    ImageIO.write(bImage, "png", new File("/tmp/test.png"));
    

    The getBufferedImage method looks like this:

    public static BufferedImage getBufferedImage(Image img) {
        if (img == null) {
            return null;
        }
        int w = img.getWidth(null);
        int h = img.getHeight(null);
        // draw original image to thumbnail image object and 
        // scale it to the new size on-the-fly 
        BufferedImage bufimg = new BufferedImage(w, h, 
            BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = bufimg.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2.drawImage(img, 0, 0, w, h, null);
        g2.dispose();
        return bufimg;
    }
    
  2. Via Transferable. Note that this runs on OS X but produces an empty image of the correct size:

    Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard()
    Transferable content =
        clip.getContents(null);
    BufferedImage img = (BufferedImage) content.getTransferData(
        DataFlavor.imageFlavor);
    ImageIO.write(img, "png", new File("/tmp/test.png"));
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top