ImageMagick (Magick.NET) 的 Pdf 到 Jpg/Tiff 操作给了我错误的 CMYK 到 CMYK 颜色
ImageMagick (Magick.NET) 's Pdf to Jpg/Tiff operation gives me wrong color for CMYK to CMYK
问题
当转换为 Jpg/Tiff (CMYK) 时,输出图像与输入的相同区域具有不同的 CMYK 值:
- (100)C 变为 (76)C, (7)M, (14)Y
- (100)M 变为 (87)M, (5)Y
- (100)Y 变为 (85)Y
- (100)K 变为 (72)C, (67)M, (67)Y, (88)K
- 纯白留(0)C,(0)M,(0)Y,(0)K
历史
- My last wrong question
- A not necessarily related question about IM and a second one.
示例代码
using System;
using System.Collections.Generic;
using ImageMagick;
namespace Whosebug
{
class Sample
{
public static void Start()
{
Rasterize("SOSample.pdf");
}
static void Rasterize(string input)
{
var settings = new MagickReadSettings
{
Density = new Density(300, 300),
ColorSpace = ColorSpace.CMYK
};
var images = new MagickImageCollection();
images.Read(input, settings);
images[0].Format = MagickFormat.Jpg; //or .Tiff
images[0].Write(input[0..^4] + ".jpg"); // or ".tiff"
}
}
}
输入
- Input PDF(带纯 C、M、Y、K 和白色区域的 CMYK)
输出
- JPG (Separation: C | M | Y | K)
通道分离代码(用于输出样本)
List<String> colors = new List<String> { "C", "M", "Y", "K" };
int n = 0;
foreach (IMagickImage<ushort> channel in images[0].Separate(Channels.All))
{
channel.Negate();
channel.Write(input[0..^4] + "_" + colors[n] + ".jpg");
n++;
}
问题解读
当转换为 PNG (RGB) 颜色看起来适合 RGB 时,感觉它在 CMYK 之前被转换为 RGB。
images[0].Format = MagickFormat.Png;
images[0].Write(input[0..^4] + ".png");
目的
这是为了胶版设置目的,黑色保持纯黑色(以及一般的 CMYK 值)很重要,原因有很多,包括颜色质量、1 色印刷 (B&W) 等
终于
- 有什么方法可以用Magick.net得到预期的结果吗?
- 有什么方法可以通过 Ghostscript 本身获得预期的结果吗?
- 如果您知道从 PDF 中获取 CMYK 光栅图像的任何方法,请帮助我,我对任何语言都持开放态度,等等。
附加信息:
使用 Magick.NET-Q16-x64 v7.21.0 NuGet 包
好吧,Ghostscript 产生了正确的输出,所以我不得不猜测 ImageMagick 正在对它做些什么。或者可能使用了错误的设备。显然我不知道 IM 做了什么让 Ghostscript 将 PDF 文件转换为 'something else'.
这个:
gs -sDEVICE=jpegcmyk -o out.jpg cmyk.pdf
生成 JPEG 文件,其中每个矩形都是 C、M、Y 或 K 的纯阴影。使用 Adobe Photoshop 中的吸管工具进行检查。
dlemstra (Magick.net) 在 GitHub 中回答了我这个输出是因为 ImageMagick 的 PDF 解码器使用了选项 -dUseCIEColor
,他们将在下一个版本中修复它。有关更多信息,请查看 GitHub Discussion.
问题
当转换为 Jpg/Tiff (CMYK) 时,输出图像与输入的相同区域具有不同的 CMYK 值:
- (100)C 变为 (76)C, (7)M, (14)Y
- (100)M 变为 (87)M, (5)Y
- (100)Y 变为 (85)Y
- (100)K 变为 (72)C, (67)M, (67)Y, (88)K
- 纯白留(0)C,(0)M,(0)Y,(0)K
历史
- My last wrong question
- A not necessarily related question about IM and a second one.
示例代码
using System;
using System.Collections.Generic;
using ImageMagick;
namespace Whosebug
{
class Sample
{
public static void Start()
{
Rasterize("SOSample.pdf");
}
static void Rasterize(string input)
{
var settings = new MagickReadSettings
{
Density = new Density(300, 300),
ColorSpace = ColorSpace.CMYK
};
var images = new MagickImageCollection();
images.Read(input, settings);
images[0].Format = MagickFormat.Jpg; //or .Tiff
images[0].Write(input[0..^4] + ".jpg"); // or ".tiff"
}
}
}
输入
- Input PDF(带纯 C、M、Y、K 和白色区域的 CMYK)
输出
- JPG (Separation: C | M | Y | K)
通道分离代码(用于输出样本)
List<String> colors = new List<String> { "C", "M", "Y", "K" };
int n = 0;
foreach (IMagickImage<ushort> channel in images[0].Separate(Channels.All))
{
channel.Negate();
channel.Write(input[0..^4] + "_" + colors[n] + ".jpg");
n++;
}
问题解读
当转换为 PNG (RGB) 颜色看起来适合 RGB 时,感觉它在 CMYK 之前被转换为 RGB。
images[0].Format = MagickFormat.Png;
images[0].Write(input[0..^4] + ".png");
目的
这是为了胶版设置目的,黑色保持纯黑色(以及一般的 CMYK 值)很重要,原因有很多,包括颜色质量、1 色印刷 (B&W) 等
终于
- 有什么方法可以用Magick.net得到预期的结果吗?
- 有什么方法可以通过 Ghostscript 本身获得预期的结果吗?
- 如果您知道从 PDF 中获取 CMYK 光栅图像的任何方法,请帮助我,我对任何语言都持开放态度,等等。
附加信息:
使用 Magick.NET-Q16-x64 v7.21.0 NuGet 包
好吧,Ghostscript 产生了正确的输出,所以我不得不猜测 ImageMagick 正在对它做些什么。或者可能使用了错误的设备。显然我不知道 IM 做了什么让 Ghostscript 将 PDF 文件转换为 'something else'.
这个:
gs -sDEVICE=jpegcmyk -o out.jpg cmyk.pdf
生成 JPEG 文件,其中每个矩形都是 C、M、Y 或 K 的纯阴影。使用 Adobe Photoshop 中的吸管工具进行检查。
dlemstra (Magick.net) 在 GitHub 中回答了我这个输出是因为 ImageMagick 的 PDF 解码器使用了选项 -dUseCIEColor
,他们将在下一个版本中修复它。有关更多信息,请查看 GitHub Discussion.