关于 c#: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

历史

  • 我最后一个错误的问题
  • 关于 IM 的一个不一定相关的问题和第二个问题。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;
using ImageMagick;

namespace stackOVERFLOW
{
    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"
        }
    }
}

输入

  • 输入 PDF(带有纯 C、M、Y、K 和白色区域的 CMYK)

输出

  • JPG(分隔:C | M | Y | K)

通道分离代码(用于输出样本)

1
2
3
4
5
6
7
8
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了。

1
2
images[0].Format = MagickFormat.Png;
images[0].Write(input[0..^4] +".png");

目的

用于胶版设置目的,黑色保持纯黑色(以及一般的 CMYK 值)很重要,原因有很多,包括颜色质量、1 色印刷(B


好吧,Ghostscript 产生了正确的输出,所以我不得不猜测 ImageMagick 正在对它做些什么。或者可能使用了错误的设备。显然,我不知道 IM 是如何让 Ghostscript 将 PDF 文件转换为"其他东西"的。

这个:

gs -sDEVICE=jpegcmyk -o out.jpg cmyk.pdf

生成一个 JPEG 文件,其中每个矩形都是 C、M、Y 或 K 的纯阴影。使用 Adob??e Photoshop 中的吸管工具进行检查。

CMYK


dlemstra (Magick.net) 在 GitHub 上回答了我这个输出是因为 ImageMagick 的 PDF 解码器使用了选项 -dUseCIEColor,他们将在下一个版本中修复它。有关更多信息,请查看 GitHub 讨论。