2012-03-04 55 views
0

我试图将PNG图像转换为以下this教程中的JPEG图像。但是我遇到了一个问题。生成的图像有粉红色的图层。Java PNG到JPG错误

有没有人有这个问题的解决方案?或者我应该使用什么代码才能将图像转换为所需的格式?

在此先感谢!

+0

这不是一个教程,而是一对代码片段。你能上传问题图片吗?它有多大的字节数? – 2012-03-04 15:18:15

+0

这里是一个样本图片:http://imageshack.us/photo/my-images/19/samplepngimage.png/ – 2012-03-04 15:24:49

回答

3
  1. 创建所需大小的BufferedImage,如:对图像的图形

    img.getGraphics().fillRect(....)

  2. 呼叫的drawImage:

    BufferedImage img = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB)

  3. 与适当的背景颜色填充在该背景之上:

    img.getGraphics().drawImage(image, 0, 0, null);

然后写下你的JPG照常图像。

+0

谢谢! fillRect完成了这项工作。 – 2012-03-04 15:38:59

+0

另请参阅graphics.drawImage与您选择的颜色和null ImageObserver:http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html#drawImage-java.awt.Image-int -int-java.awt.Color-java.awt.image.ImageObserver- – m4rtin 2014-08-16 21:49:26

3

您使用哪种颜色模式?在创建缓冲图像对象时,尝试添加类似此选项的类型。

File newFile = new File(path + fileName + "." + Strings.FILE_TYPE); 

    Image image = null; 
    try { 
     image = ImageIO.read(url); // I was using an image from web 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

    image = image.getScaledInstance(width, height, Image.SCALE_SMOOTH); 
    try { 
     BufferedImage img = toBufferedImage(image); 
     ImageIO.write(img, "jpg", newFile); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 



} 

private static BufferedImage toBufferedImage(Image src) { 
    int w = src.getWidth(null); 
    int h = src.getHeight(null); 
    int type = BufferedImage.TYPE_INT_RGB; // other options 
    BufferedImage dest = new BufferedImage(w, h, type); 
    Graphics2D g2 = dest.createGraphics(); 
    g2.drawImage(src, 0, 0, null); 
    g2.dispose(); 
    return dest; 
} 
+0

现在我在教程中有4行。我不知道这些变量是什么:dest和src。如何申报? – 2012-03-04 15:36:57