相关疑难解决方法(0)

JPEG图像颜色错误

我有一个方法来读取图像,转换它们(大小,格式)并将它们写回.这总是很好用,但现在我遇到了一些显然包含一些元数据(IPTC)的JPEG图像(来自新闻社).转换这些图像时,颜色都是错误的.我的第一个猜测是,那些是CMYK图像,但它们不是.

问题必须来自阅读,因为无论我是将图像转换为较小的JPEG还是PNG,它总是看起来一样.

起初,我曾经ImageIO.read()读过这张照片.我现在得到实际的ImageReadervia ImageIO.getImageReadersByMIMEType()并尝试告诉读者通过设置ignoreMetadata参数ImageReader#setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)但忽略元数据但没有成功.

然后我创建了一个没有元数据的图像版本(使用Fireworks).该图像已正确转换.

我能找到的唯一区别是,对于未工作的图像,读者变量的colorSpaceCode值为2,而对于工作图像,值为3.还有一个outColorSpaceCode2两个图像.

由于读者源评论仅表示Set by setImageData本机代码回调.一个修改过的IJG + NIFTY颜色空间代码我现在真的被卡住了.所以任何帮助将不胜感激.

您可以通过此处并单击下载来获取原始图像(~3 MB).下图左侧显示了我从原始图像中获得的内容,右侧显示了它应该是什么样子.

错误的颜色 正确的颜色(删除元数据后)

java jpeg image

31
推荐指数
1
解决办法
1万
查看次数

调整BufferedImages的大小并将其存储到文件中会导致JPG图像出现黑色背景

我有以下代码:

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;


public class JavaApplication
{
    public static void main(String[] args) throws Exception
    {
        File orig = new File ("/home/xxx/Pictures/xxx.jpg");
        BufferedImage bm1 = ImageIO.read(orig);

        Image scaled = bm1.getScaledInstance(100, 200, BufferedImage.SCALE_SMOOTH);
        BufferedImage bm2 = toBufferedImage(scaled);

        File resized = new File ("/home/xxx/Pictures/resized.jpg");
        ImageIO.write(bm2, "jpg", resized);
    }

    public static BufferedImage toBufferedImage(Image img)
    {
        if (img instanceof BufferedImage)
        {
            return (BufferedImage) img;
        }

        BufferedImage bimage = new BufferedImage(img.getWidth(null),       img.getHeight(null), BufferedImage.TYPE_INT_ARGB);

        bimage.getGraphics().drawImage(img, 0, 0 , null); …
Run Code Online (Sandbox Code Playgroud)

java bufferedimage image-manipulation

2
推荐指数
1
解决办法
3369
查看次数

标签 统计

java ×2

bufferedimage ×1

image ×1

image-manipulation ×1

jpeg ×1