C# ImageMagick(Magick.NET)和#x27;s Pdf to Jpg/Tiff操作为CMYK to CMYK提供了错误的颜色

C# ImageMagick(Magick.NET)和#x27;s Pdf to Jpg/Tiff操作为CMYK to CMYK提供了错误的颜色,c#,pdf,imagemagick,ghostscript,magick.net,C#,Pdf,Imagemagick,Ghostscript,Magick.net,问题 using System; using System.Collections.Generic; using ImageMagick; namespace stackOVERFLOW { class Sample { public static void Start() { Rasterize("SOSample.pdf"); } static void Raster

问题

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"
        }
    }
}
转换为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
历史

示例代码

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"
        }
    }
}
输入

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

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

目的

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"
        }
    }
}
这是为了胶印版设置的目的,重要的是黑色保持纯黑色(以及通常的CMYK值),原因有很多,包括颜色质量、单色印刷(B&W)等

最后

  • 有没有办法通过Magick.net获得预期的结果
  • 有没有办法通过Ghostscript本身获得预期的结果
  • 如果你知道从PDF中获取CMYK光栅图像的任何方法,请帮助我,我对任何语言都持开放态度,等等
传统信息:


使用Magick.NET-Q16-x64 v7.21.0 NuGet软件包

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

这:

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

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


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

我没有photoshop,但图像是RGB格式的,不是吗?它不应该是CMYK格式的?我需要CMYK格式的图像,如果ghostscript只输出RGB,我需要将其转换为CMYK格式,我会有颜色损失。不,图像是CMYK格式的,当我在Photoshop中打开它时,它会显示其CMYK格式,并允许我查看组件。你用什么打开文件?许多观众无法很好地处理CMYK。你可以使用我发布的命令行自己创建一个JPEG文件,以防SO对图像做了些什么。是的,我刚刚意识到这也发生在我的图像上,谢谢你排除了重影脚本问题。我认为这只是ImageMagick做事情的方式,没有解决办法。我将尝试直接使用ghostscript。