相关疑难解决方法(0)

如何正确地在Java中从CMYK转换为RGB?

我将用于将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 cmyk

22
推荐指数
3
解决办法
3万
查看次数

使用java将透明gif/png转换为jpeg

我想使用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图像:

输出jpeg图像

[如果图像丢失:IE无法显示jpeg,Firefox会显示无效颜色的图像.]

我正在使用Java 1.5.

我还尝试使用gimp将示例gif转换为png并使用png作为Java代码的输入.结果是一样的.

这是JDK中的错误吗?如何在没有第三方库的情况下正确转换图像?

更新:

答案表明jpeg转换无法正确处理透明度(我仍然认为这是一个错误)并建议使用预定义颜色替换透明像素的解决方法.这两种建议的方法都非常复杂,所以我实现了一个更简单的方法(将作为答案发布).我接受了第一个已发布的答案(Markus).我不知道哪种实现更好.我选择了最简单的一个,但我发现它不起作用的gif.

java transparency jpeg gif java-io

20
推荐指数
3
解决办法
3万
查看次数

Toolkit.getDefaultToolkit().createImage()vs ImageIO.read()

我正在使用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)
  1. 有谁知道为什么会这样?它JPEG是不受支持的特殊格式吗?
  2. 我在这个论坛上看到,大多数人都建议使用ImageIO(例如这里).为什么?

非常感谢

java swing jpeg image javax.imageio

8
推荐指数
2
解决办法
7603
查看次数

标签 统计

java ×3

jpeg ×2

cmyk ×1

gif ×1

image ×1

java-io ×1

javax.imageio ×1

swing ×1

transparency ×1