- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 ICC 配置文件和 Java 转换图像。源图像可以是基于 RGB 或 CMYK 的,并且可能嵌入了 icc 配置文件。新图像也应采用 RGB 或 CMYK 颜色模式,并且必须嵌入 icc 配置文件。所有源图像都将采用 JPEG 格式。
我应该使用哪个(外部/内部)Java 框架/库?哪种方法最适合用于 RGB > CMYK 或 RGB > RGB 或 CMYK > CMYK 或 CMYK > RGB 基于 icc 的图像转换?
有内存限制吗?它可以处理更大的图像文件吗?以及如何处理 sRGB 和 AdobeRGB 之间的差异?
有没有人有使用 Java 处理图像转换的经验?
谢谢
最佳答案
警告:您的问题含糊不清/范围很广,因此答案也必须如此。但我真的认为它值得一个答案。
核心 Java 2D 类对 ICC 配置文件有很好的支持。请参阅 ICC_Profile
和 ICC_ColorSpace
。
您可以使用 ColorConvertOp
在颜色空间(或颜色配置文件)之间进行转换。它同时支持 BufferedImage
和 WritableRaster
,通常 ICC 转换速度很快(在后台使用 native 库)。它将处理您提到的所有转换,包括 sRGB 和 AdobeRGB 差异。
到目前为止,还不错。
要使用 ICC 配置文件读写 JPEG 文件,事情会变得有点复杂。理论上,标准ImageIO
API是你所需要的全部。您需要获取元数据 (IIOMetadata
) 和像素(作为 Raster
或 BufferedImage
)。
ICC 配置文件将成为元数据的一部分。您需要获取 native JPEG 元数据 specified here .对于 RGB JPEG,这就是您所需要的。
不幸的是,作为所有 Oracle JRE 一部分的标准 JPEGImageReader
不支持将 CMYK 数据读取为 BufferedImage
。您必须以 Raster
格式阅读。栅格通常包含 YCbCr 或 YCCK 数据,具体取决于写入时使用的颜色转换,因此您可能还必须处理该转换。或者,您可以使用我的 JPEG plugin for ImageIO直接支持 CMYK JPEG。
写作几乎是一样的。编写 RGB 是“直接的”(尽管需要几行代码),而编写 CMYK 则更难。重要的是使用从您读取的图像中获得的元数据,然后将 ICC 配置文件替换为您已转换为的配置文件。最后将元数据和更新后的图像数据写回。我正在为我的 JPEGImageWriter
开发 CMYK JPEG 写入支持,使其像写入 RGB 一样简单。我可以给你一个“先睹为快”,但它还没有 100% 准备好生产。
对于所有与 Java 2D 和 BufferedImage
/Raster
相关的操作,您通常会受到可用(堆)内存(以及 Java 中的最大数组大小)的限制,你应该有那么多 RAM)。有一些解决方法,请随时查看我的 MappedImageFactory
和 MappedFileBuffer
类 here对于 nio MappedByteBuffer
(内存映射文件缓冲区)支持 BufferedImage
的数据缓冲区。我确信 JAI 对此也有一些选择,但我通常不建议将 JAI 用于新代码,因为它似乎完全被 Oracle 蒙在鼓里。
好吗?祝你好运!不过,请准备好花一些时间在这上面。 :-)
关于java - 使用 Java 进行基于 ICC 的图像转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29707253/
我没有 icc已安装,但我需要所有编译器优化标志的列表。我试过谷歌并搜索他们的网站文档,但我找不到任何东西。 我找到了一个列表 all编译器选项,但我只需要优化选项。 最佳答案 此页面列出了 IC 优
我使用的是 ubuntu 14.04。我刚刚下载并安装了英特尔并行工作室 2016。 如果我不是从 icc 文件夹中输入 icc,则会收到错误命令未找到。有没有办法像 gcc 一样设置 icc(在我运
我最近开始使用 ICC (18.0.1.126) 来编译一段代码,该代码可以在任意优化设置上与 GCC 和 Clang 一起正常工作。该代码包含一个汇编例程,该例程使用 AVX2 和 FMA 指令将
我的问题是我想从命令行调用 icc 编译器,但我的电脑找不到它。我已经安装了最新的 oneAPI 并获取了 setvars.sh。 即使我在安装例程下搜索'icc'文件我也找不到icc编译器文件。 '
使用 ICC 编译时,每条指令后面都是 2 个点分隔的数字,并以哈希符号为前缀。这是什么意思? For example: L__routine_start__Z12testFunctionPii_0:
有人可以解释为什么 icc 在下面的代码 1 中没有执行循环不变代码运动(移动 a 的指针赋值)的原因。当 a 指针赋值从代码 2 中完成的 t6 循环中移出时,我看到性能提高了 40%。我尝试将指针
考虑以下代码: template struct Foo { }; template struct Foo> { static void print() { std::cerr s
我在 Visual Studio 2012 中使用 Intel C++ 13.0.1.119 Build 20121008 for IA-32 在 Windows 上运行。我一直遇到链接器错误问题,并
我一直在尝试使用英特尔的四精度 float 。我有以下代码,它返回了意外的结果。 #include #include int print(const char *label, _Quad r) {
我写了一个应用程序,它通过 ImageMagick 修剪和调整一堆图像的大小。图像也被转换为灰度。但是当我尝试在 Photoshop CC 中打开转换后的图像时,会出现以下警告: The embedd
我正在用 icc 编译一个 cpp 代码(在 ubuntu 下): icc -I/usr/share/R/include -I/~/Desktop/work/p1/geqw4/vi3/out/sp/c
首先让我说我是 R 的新手,并试图弄清楚如何在我的特定数据集上运行 icc,这可能与正常情况下有点不同。 数据集如下所示 +------------+------------------+------
我遇到了 icc 问题,到目前为止我还没有找到任何解决方案。我的程序用gcc编译时运行正常,但用icc编译时显然没有执行任何操作。不会发生运行时错误。该程序结束得非常快(几毫秒),但预计需要几秒钟(对
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
在尝试使用 Jasper Reports 生成符合 PDF/A 标准的 PDF 时,我得到了 net.sf.jasperreports.engine.util.JRPdfaIccProfileNotF
因此,当使用基本的icc bob.cpp -o bob 编译并运行时,出现以下代码段错误: #include int foo () { return 6; } int main() { st
现在我正在使用 icc 来编译和运行我的 ANSI C 代码。 当我打开-O2 优化时,一切正常。但是,当我更改为 -fast 时,结果会有所不同(有很多 nan)。 我搜索并尝试,发现错误存在于-x
我想报告一个有趣的错误。下面的这段代码应该打印出 20 次“1.0”。相反,在我的 mac(雪豹 10.6.8)上使用 icc(11.1)编译时,我得到不稳定的值(16 次“0.0”然后 4 次“1.
有没有办法在使用英特尔编译器时改变缓存写入策略。我发现 Intel Core i7 处理器的一级缓存是回写缓存。 我的问题是:是否有任何可能的方法来调整编译器,将缓存策略从回写更改为直写? 最佳答案
我目前在 centos7 上校准显示器时遇到问题。使用 gnome 或 kde,我无法正确使用颜色设置来应用新创建的 ICC 配置文件。设备选项卡未显示列出(仅安装了打印机)。 经过一些阅读,我发现
我是一名优秀的程序员,十分优秀!