我将用于将CMYK jpeg转换为RGB的Java代码导致输出图像太亮 - 请参阅下面的代码.任何人都可以建议正确的转换方式吗?
以下代码需要Java Advanced Image IO来读取jpeg和example-cmyk.jpg
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.File;
import javax.imageio.ImageIO;
public class TestCmykToRgb {
public static void main(String[] args) throws Exception {
BufferedImage cmykImage = ImageIO.read(new File(
"j:\\temp\\example-cmyk.jpg"));
BufferedImage rgbImage = new BufferedImage(cmykImage.getWidth(),
cmykImage.getHeight(), BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(cmykImage, rgbImage);
ImageIO.write(rgbImage, "JPEG", new File("j:\\temp\\example-rgb.jpg"));
}
}
Run Code Online (Sandbox Code Playgroud) 我想使用Java将gif图像转换为jpeg.它适用于大多数图像,但我有一个简单的透明gif图像:
输入gif图像http://img292.imageshack.us/img292/2103/indexedtestal7.gif
[如果图像丢失:它是一个蓝色圆圈,周围有透明像素]
当我使用以下代码转换此图像时:
File file = new File("indexed_test.gif");
BufferedImage image = ImageIO.read(file);
File f = new File("indexed_test.jpg");
ImageIO.write(image, "jpg", f);
Run Code Online (Sandbox Code Playgroud)
此代码可以在不抛出异常的情况下工作,但会导致无效的jpeg图像:
[如果图像丢失:IE无法显示jpeg,Firefox会显示无效颜色的图像.]
我正在使用Java 1.5.
我还尝试使用gimp将示例gif转换为png并使用png作为Java代码的输入.结果是一样的.
这是JDK中的错误吗?如何在没有第三方库的情况下正确转换图像?
更新:
答案表明jpeg转换无法正确处理透明度(我仍然认为这是一个错误)并建议使用预定义颜色替换透明像素的解决方法.这两种建议的方法都非常复杂,所以我实现了一个更简单的方法(将作为答案发布).我接受了第一个已发布的答案(Markus).我不知道哪种实现更好.我选择了最简单的一个,但我发现它不起作用的gif.
我正在使用Swing创建一个UI,我想在一个图像中显示一个图像JLabel.我使用的代码如下:
JLabel label = new JLabel(new ImageIcon(ImageIO.read(new File("img.jpg"))));
Run Code Online (Sandbox Code Playgroud)
如果我使用png图像,这可以正常工作,但是当涉及到jpg(只有其中一些)时,我得到一个红色图像(与我在Paint.NET中看到的图像不同).我使用的图像是这个:img.jpg
所以我试过(作为替代方案):
Toolkit.getDefaultToolkit().createImage(new File("img.jpg").getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)
JPEG是不受支持的特殊格式吗?非常感谢