Converting transparent gif / png to jpeg using java

前端 未结 7 825
南笙
南笙 2020-11-29 02:27

I\'d like to convert gif images to jpeg using Java. It works great for most images, but I have a simple transparent gif image:

Input gif image http://img292.imagesha

7条回答
  •  萌比男神i
    2020-11-29 03:03

    The problem (at least with png to jpg conversion) is that the color scheme isn't the same, because jpg doesn't support transparency.

    What we've done successfully is something along these lines (this is pulled from various bits of code - so please forgive the crudeness of the formatting):

    File file = new File("indexed_test.gif");
    BufferedImage image = ImageIO.read(file);
    int width = image.getWidth();
    int height = image.getHeight();
    BufferedImage jpgImage;
    
    //you can probably do this without the headless check if you just use the first block
    if (GraphicsEnvironment.isHeadless()) {
      if (image.getType() == BufferedImage.TYPE_CUSTOM) {
          //coerce it to  TYPE_INT_ARGB and cross fingers -- PNGs give a    TYPE_CUSTOM and that doesn't work with
          //trying to create a new BufferedImage
         jpgImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
      } else {
         jpgImage = new BufferedImage(width, height, image.getType());
      }
    } else {
         jgpImage =   GraphicsEnvironment.getLocalGraphicsEnvironment().
            getDefaultScreenDevice().getDefaultConfiguration().
            createCompatibleImage(width, height, image.getTransparency()); 
    }
    
    //copy the original to the new image
    Graphics2D g2 = null;
    try {
     g2 = jpg.createGraphics();
    
     g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 
                        RenderingHints.VALUE_INTERPOLATION_BICUBIC);
     g2.drawImage(image, 0, 0, width, height, null);
    }
    finally {
       if (g2 != null) {
           g2.dispose();
       }
    }
    
    File f = new File("indexed_test.jpg");
    
    ImageIO.write(jpgImage, "jpg", f);
    

    This works for png to jpg and gif to jpg. And you will have a white background where the transparent bits were. You can change this by having g2 fill the image with another color before the drawImage call.

提交回复
热议问题