[英]ImageIO.write converting color space RGB to CMYK for a JPG image
我正在从客户端发送jpg
图像。 图像以blob 的形式发送。 这是发送画布图像的javascript代码
canvas.toBlob((blob) => {
this.setState({preview: blob},
() => {
console.log(blob.size);
let data = new FormData();
// const test = URL.createObjectURL(blob);
// console.log(test);
const file = new File([blob], "File name", {type: "image/png"});
data.append("file", file);
console.log(this.state.preview);
axios({
method: "POST",
data: data,
url: "/media",
headers: {
'Content-Type': 'multipart/form-data'
}
}).then().catch()
// axios.post("http://localhost:8085/api/media", data).then(r => {}).catch()
}
);
}, "image/jpg", 0)
所选文件是一个jpg
文件,由于某些原因将其转换为canvas
,然后将其作为blob
发送到服务器。
这是用java编写的服务器图像处理代码:
public void uploadMedia(MultipartFile mediaFile) {
try{
BufferedImage image = ImageIO.read(mediaFile.getInputStream());
System.out.println(image.getColorModel().getColorSpace().getType() == ColorSpace.TYPE_RGB); //TRUE
ImageIO.write(image, "jpg", new File("/Users/puspender/Desktop/Test/image.jpg")); //BLACK IMAGE with CMYK color space
ImageIO.write(image, "png", new File("/Users/puspender/Desktop/Test/image.png"));
}catch(Exception e){}
}
如果我为ImageIO.write
选择png
格式,则图像保存成功,但如果格式为jpg
则保存黑色图像,并且该黑色图像的color space
更改为CMYK
。 即使它是原始文件的RGB
,我也在保存文件之前在控制台上打印了它。
仅当在客户端上裁剪图像(或其他内容)然后从中创建canvas
并将该canvas
blob
作为有效负载发送时,才会出现此问题。 使用<input type="file />
选择文件时不会出现问题
更新:按照 Mike 的要求,我阅读ImageIo
由ImageIo
生成的黑色jpg
。 结果是一样的,一个黑色的图像。
File file = new File("/location/generated_black.jpg");
BufferedImage image = ImageIO.read(file);
ImageIO.write(image, "jpg", new File("/location/from-java-main-400x400.jpg"));
我还用原始文件测试了上面的代码,那时ImageIo
正确处理了它。
我注意到一件重要的事情:黑色图像实际上不是黑色,它只是由于色彩空间的变化而受到干扰的颜色。 当我将其上传到 AWS S3 时,我注意到了这一点。 这是图像( CMYK
) 原文件如下:
我设法正确地工作。 这个线程上的一个伟大的个人建议了这个解决方案,它甚至运行良好。
但很少有问题保持不变:
blob
数据上,而不发生在前面提到的普通文件选择器上jpg
而不是png
时才发出问题? 以及为什么ImageIo
在jpg
改变color space
RGB 和 CMYK 不是颜色空间,而是颜色编码模型。
任何一个州都没有足够的信息来提供有意义的解决方案。
术语表中的 ISO 22028-1 标准定义的 RGB 色彩空间规定,它必须包括以下定义: 1. 原色 2. 传递函数 3. 白点
对于 CMYK,必须清楚地识别纸张类型、油墨成分和光源等变量的响应。
忽略这些方面中的任何一个都意味着由此产生的颜色转换完全没有意义,而且对任何人都没有任何好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.