我遇到了一个常见而又困难的问题.我不使用Photoshop进行图像处理.由于我的所有工作都是基于网络的,因此GIMP在99%的情况下都能满足我的需求.该问题是,我偶尔会收到PSD与文件CMYK编码,而不是RGB编码.这些文件不会在GIMP中打开,也不会在ImageMagick中转换.
有没有人找到一个很好的解决方案,将CMYK文件转换为不涉及使用Photoshop的RGB文件(PSD格式或像PNG这样的平面格式)?说一个GIMP或独立实用程序的插件?
我很难将ImageMagick identify
用于识别PDF作为CMYK.
基本上,假设我正在构建此文件test.tex
,使用pdflatex
:
\documentclass[a4paper,12pt]{article}
%% https://tex.stackexchange.com/questions/13071
\pdfcompresslevel=0
%% http://compgroups.net/comp.text.tex/Making-a-cmyk-PDF
%% ln -s /usr/share/color/icc/sRGB.icm .
% \immediate\pdfobj stream attr{/N 4} file{sRGB.icm}
% \pdfcatalog{%
% /OutputIntents [ <<
% /Type /OutputIntent
% /S/GTS_PDFA1
% /DestOutputProfile \the\pdflastobj\space 0 R
% /OutputConditionIdentifier (sRGB IEC61966-2.1)
% /Info(sRGB IEC61966-2.1)
% >> ]
% }
%% http://latex-my.blogspot.com/2010/02/cmyk-output-for-commercial-printing.html
%% https://tex.stackexchange.com/questions/9961
\usepackage[cmyk]{xcolor}
\begin{document}
Some text here...
\end{document}
Run Code Online (Sandbox Code Playgroud)
如果我然后尝试识别生成的test.pdf
文件,我将其作为RGB,无论我尝试过什么选项(至少根据源中的链接) - 然而,其中的颜色将保存为CMYK; 对于上面的来源:
$ grep -ia 'cmyk\|rgb\| k' test.pdf
0 0 0 1 k …
Run Code Online (Sandbox Code Playgroud) 我将用于将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) 有人知道如何使用C#正确识别CMYK图像吗?我发现如何使用ImageMagick,但我需要一个.NET解决方案.我在网上找到了3个代码段,只有一个在Windows 7中运行,但在Windows Server 2008 SP2中都失败了.我需要它至少在Windows Server 2008 SP2中工作.这是我发现的:
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Drawing;
using System.Drawing.Imaging;
bool isCmyk;
// WPF
BitmapImage wpfImage = new BitmapImage(new Uri(imgFile));
// false in Win7 & WinServer08, wpfImage.Format = Bgr32
isCmyk = (wpfImage.Format == PixelFormats.Cmyk32);
// Using GDI+
Image img = Image.FromFile(file);
// false in Win7 & WinServer08
isCmyk = ((((ImageFlags)img.Flags) & ImageFlags.ColorSpaceCmyk) ==
ImageFlags.ColorSpaceCmyk);
// true in Win7, false in WinServer08 (img.PixelFormat = Format24bppRgb)
isCmyk = ((int)img.PixelFormat) == 8207;
Run Code Online (Sandbox Code Playgroud) 这个问题似乎发布在很多地方的互联网和SO,但我找不到一个满意的答案:(
如何使用ICC配置文件将RGB值转换为CMYK值?
我有最接近的答案,它解释了如何从CMYK转换为RGB而不是相反,这是我需要的.(http://stackoverflow.com/questions/4920482/cmyk-to-rgb-formula-of-photoshop/5076731#5076731)
float[] colorValues = new float[4];
colorValues[0] = c / 255f;
colorValues[1] = m / 255f;
colorValues[2] = y / 255f;
colorValues[3] = k / 255f;
System.Windows.Media.Color color = Color.FromValues(colorValues,
new Uri(@"C:\Users\me\Documents\ISOcoated_v2_300_eci.icc"));
System.Drawing.Color rgbColor = System.Drawing.Color.FromArgb(color.R, color.G, color.B);
Run Code Online (Sandbox Code Playgroud)
我想我应该使用System.Windows.Media命名空间中的一些类/结构/方法.
System.Windows.Media.Color结构包含一个方法FromRgb,但是我无法在System.Windows.Media.Color中获取CMYK值!
非常感谢
是否可以指定SVG图像应该在CMYK中产生输出?如果是这样,这是一项大任务吗?如果图像的颜色是用RGB指定的,那么将它们转换为CMYK会很困难吗?
有人知道如何使用C#在ASP.NET中正确识别CMYK图像吗?当我检查实例的Flags
属性时Bitmap
,我得到的结果不正确.
我已经创建了三个图像来测试它:cmyk.jpg,rgb.jpg和gray.jpg.这些分别是CMYK,RGB和灰度图像.
这是我的测试代码:
static void Main(string[] args)
{
Bitmap bmpCMYK = new Bitmap("cmyk.jpg");
Bitmap bmpRGB = new Bitmap("rgb.jpg");
Bitmap bmpGray = new Bitmap("gray.jpg");
Console.WriteLine("\t\tRgb\tCmyk\tGray\tYcbcr\tYcck\tPixelFormat");
Console.WriteLine("cmyk.jpg\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
bmpCMYK.PixelFormat);
Console.WriteLine("rgb.jpg\t\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
bmpRGB.PixelFormat);
Console.WriteLine("gray.jpg\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
bmpGray.PixelFormat);
bmpCMYK.Dispose();
bmpRGB.Dispose();
bmpGray.Dispose();
Console.ReadLine();
}
private static bool IsSet(Bitmap bitmap, System.Drawing.Imaging.ImageFlags flag)
{
return (bitmap.Flags & …
Run Code Online (Sandbox Code Playgroud) 首先,我想解释导致问题的情况/要求:
在我们的Web应用程序中,我们无法支持CMYK图像(JPEG),因为IE 8及以下版本无法显示它们.因此,我们需要检测何时有人想要上传这样的图像并拒绝它.
不幸的是,Java的ImageIO不会读取这些图像,也不会使我无法获得检测到的色彩空间.从调试开始,JPEGImageReader
内部似乎得到了颜色空间代码11(这意味着JCS_YCCK
),但我无法安全地访问该信息.
当查询读者的图像类型时,我没有得到任何CMYK,所以我可能会假设no image types = unsupported image
.
我使用成像工具将源CMYK图像转换为RGB,以便测试它是否可读(我在尝试获取"无CMYK支持"消息时尝试模拟管理员的步骤).但是,JPEGImageReader
不会读取该图像,因为它假定(在源中注释!)3分量RGB颜色空间,但图像标题报告4个组件(可能是RGBA或ARGB),因此IllegalArgumentException
抛出了一个.
因此,ImageIO不是一个选项,因为我无法可靠地获取图像的色彩空间,我无法告诉管理员为什么不能接受由于某些内部的精细图像(它可以由浏览器显示)错误.
这让我尝试了JAI ImageIO,它CLibJPEGImageReader
做得非常出色并正确读取了我所有的测试图像.
但是,由于我们将应用程序部署在可能托管其他应用程序的JBoss中,因此我们希望尽可能保持它们的隔离.据我所知,我需要JAI ImageIO的安装到JRE或以其他方式使本机库提供,以使用它们,因此,其他应用程序可能访问到它们为好,这可能会导致副作用(至少我们不得不测试很多,以确保不是这种情况).
这就是问题的解释,这里再次出现: JAI ImageIO是否有任何纯Java替代品可以可靠地检测并可能转换CMYK图像?
提前致谢,
托马斯
是否可以为Adobe Illustrator或其他工具编写脚本,以读取大量PDF文件的内容并将所有RGB颜色转换为CMYK?
如果是这样,有人可以指出所涉及的一些步骤,或者在哪里可以找到更多相关信息?
我有一个cmyk pdf,我试图转换为RGB jpeg或png文件,但颜色保持非常接近CMYK版本(与Photoshop如何做)
我正在尝试以下命令,但颜色从红色变为几乎明亮的霓虹红色等等.
这是命令
convert cmykpdf.pdf +profile icc -profile AdobeRGB1998.icc -colorspace sRGB jpegtesting.jpg
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?或想法如何做到这一点.我尝试将其保存为PNG也出现了同样的问题,并尝试将sRGB更改为RGB
注意:它不一定需要RGB jpeg它甚至可以是CMYK jpeg但我只需要它在浏览器中正确显示我知道safari不能正确显示cmyk jpegs
我的目标是在浏览器中显示一个img,显示正确的颜色和正确的分辨率,没有任何像素化