创建 CMYK+alpha 位图,将黑色映射到特定的 CMYK 颜色
Create CMYK+alpha bitmap, mapping black to specific CMYK color
鉴于此拱形文本图像,透明背景上的黑色像素,抗锯齿
我最终想要此文本的 CMYK 渲染,其中每个黑色像素都变成特定的 CMYK 颜色,例如洋红色或 {72,36,9,28},或我的客户指定的任何颜色。最终输出将是 PDF。每个透明像素都需要保持透明,因为文本下方可能还有其他 PDF 对象。
我会满足于将 CMYK+Alpha TIFF 等价物写入磁盘。或者,可能是 System.Windows.Media.Imaging.Bitmapimage。或者别的。
我的PDF库是ABCpdf.NET10。我发现System.Drawing不支持CMYK颜色格式。我对其他第三方图书馆没意见;我已经在图书馆的另一个环境中使用 AForge。
我不想要进行 RGB 到 CMYK 的转换,甚至没有配置文件。我 不 想要在 PDF 中进行通用颜色替换。我的客户会指定一个明确的 CMYK 目标颜色,我需要准确匹配它;在 RGB 近似值上使用颜色转换是不行的。
我处理过各种各样的事情。我最接近的是在保持 RGB 的同时交换颜色——黑色变成透明,透明变成白色——并在图像下方绘制一个填充的洋红色框。然后在没有文本的地方绘制白色像素,下面的洋红色显示出来。作为一个整体来看,这最终看起来像是白色上扭曲的洋红色文字。但是坐在组下的任何东西都不会显示出来。 link
有什么想法吗?
websupergoo 的 Jos Vernon 使用 ABCpdf 功能提出了一个非常简单的答案。
using WebSupergoo.ABCpdf10;
using WebSupergoo.ABCpdf10.Objects;
namespace RecolorRenderedImage
{
class Program
{
static void Main(string[] args)
{
using (Doc theDoc = new Doc()) {
// this background image is there to prove that the text is not obscuring other pdf objects
theDoc.AddImage("c:\temp\background-pic.jpg");
// this is the black warped text
string fullFilePath = "c:\temp\foobar.png";
// read it into an XImage. Add to the doc, and retrieve the pixmap
XReadOptions readOptions = new XReadOptions();
XImage image = XImage.FromFile(fullFilePath, readOptions);
int theID = theDoc.AddImageObject(image, true);
int imageID = theDoc.GetInfoInt(theID, "XObject");
PixMap thePM = (PixMap)theDoc.ObjectSoup[imageID];
// recolor the pixmap temporary spot color space with the desired color (gold in this case)
int spotColorID = theDoc.AddColorSpaceSpot("tempSpace", "24 44 100 2");
ColorSpace theSP = (ColorSpace)theDoc.ObjectSoup[spotColorID];
thePM.Recolor(theSP);
// immediately recolor the pixmap back to CMYK
ColorSpace theSP2 = new ColorSpace(theDoc.ObjectSoup, ColorSpaceType.DeviceCMYK);
thePM.Recolor(theSP2);
theDoc.Save("c:\temp\test.pdf");
}
}
}
}
后期编辑:将 link 删除到输出文件,因为我在某个时候从 GDrive 中删除了它。
鉴于此拱形文本图像,透明背景上的黑色像素,抗锯齿
我最终想要此文本的 CMYK 渲染,其中每个黑色像素都变成特定的 CMYK 颜色,例如洋红色或 {72,36,9,28},或我的客户指定的任何颜色。最终输出将是 PDF。每个透明像素都需要保持透明,因为文本下方可能还有其他 PDF 对象。
我会满足于将 CMYK+Alpha TIFF 等价物写入磁盘。或者,可能是 System.Windows.Media.Imaging.Bitmapimage。或者别的。
我的PDF库是ABCpdf.NET10。我发现System.Drawing不支持CMYK颜色格式。我对其他第三方图书馆没意见;我已经在图书馆的另一个环境中使用 AForge。
我不想要进行 RGB 到 CMYK 的转换,甚至没有配置文件。我 不 想要在 PDF 中进行通用颜色替换。我的客户会指定一个明确的 CMYK 目标颜色,我需要准确匹配它;在 RGB 近似值上使用颜色转换是不行的。
我处理过各种各样的事情。我最接近的是在保持 RGB 的同时交换颜色——黑色变成透明,透明变成白色——并在图像下方绘制一个填充的洋红色框。然后在没有文本的地方绘制白色像素,下面的洋红色显示出来。作为一个整体来看,这最终看起来像是白色上扭曲的洋红色文字。但是坐在组下的任何东西都不会显示出来。 link
有什么想法吗?
websupergoo 的 Jos Vernon 使用 ABCpdf 功能提出了一个非常简单的答案。
using WebSupergoo.ABCpdf10;
using WebSupergoo.ABCpdf10.Objects;
namespace RecolorRenderedImage
{
class Program
{
static void Main(string[] args)
{
using (Doc theDoc = new Doc()) {
// this background image is there to prove that the text is not obscuring other pdf objects
theDoc.AddImage("c:\temp\background-pic.jpg");
// this is the black warped text
string fullFilePath = "c:\temp\foobar.png";
// read it into an XImage. Add to the doc, and retrieve the pixmap
XReadOptions readOptions = new XReadOptions();
XImage image = XImage.FromFile(fullFilePath, readOptions);
int theID = theDoc.AddImageObject(image, true);
int imageID = theDoc.GetInfoInt(theID, "XObject");
PixMap thePM = (PixMap)theDoc.ObjectSoup[imageID];
// recolor the pixmap temporary spot color space with the desired color (gold in this case)
int spotColorID = theDoc.AddColorSpaceSpot("tempSpace", "24 44 100 2");
ColorSpace theSP = (ColorSpace)theDoc.ObjectSoup[spotColorID];
thePM.Recolor(theSP);
// immediately recolor the pixmap back to CMYK
ColorSpace theSP2 = new ColorSpace(theDoc.ObjectSoup, ColorSpaceType.DeviceCMYK);
thePM.Recolor(theSP2);
theDoc.Save("c:\temp\test.pdf");
}
}
}
}
后期编辑:将 link 删除到输出文件,因为我在某个时候从 GDrive 中删除了它。