在ImageMagick中将颜色应用于PDF转换.NET



在上一篇SO文章的延续中,我从能够从PDF转换中删除透明度,到无法调整转换的背景色。我已经试过了在Imagemagik上能找到的一切。NET github文档。我需要确保通过这个软件包传递的任何图像都有不透明的白色背景。

/// <summary>
/// Write image data from a pdf file to a bitmap file
/// </summary>
/// <param name="imgData"></param>
private static void convertPdfToBmp(ImageData imgData)
{
MagickReadSettings settings = new MagickReadSettings();
// Settings the density to 600 dpi will create an image with a better quality
settings.Density = new Density(600);
using (MagickImageCollection images = new MagickImageCollection())
{
// Add all the pages of the pdf file to the collection
images.Read(imgData.pdfFilePath, settings);
// Create new image that appends all the pages horizontally
using (IMagickImage image = images.AppendVertically())
{
// Remove the transparency layers and color the background white
image.Alpha(AlphaOption.Remove);
int aval = image.Settings.BackgroundColor.A = 0;
int rval = image.Settings.BackgroundColor.R = 0;
int bval = image.Settings.BackgroundColor.G = 0;
int gval = image.Settings.BackgroundColor.B = 0;
// Convert the image to a bitmap
image.Format = MagickFormat.Bmp;
// Delete any old file 
if (File.Exists(imgData.bmpFilePath))
{
File.Delete(imgData.bmpFilePath);
}
// Save result as a bmp
image.Write(imgData.bmpFilePath);
}
}
}

在上面的代码中,如果我将4个通道image.Settings.BackgroundColor中的任何一个设置为不同的颜色,它对图像没有影响。如果我使用image.BackgroundColor,它对图像没有影响。我错过了什么?

注意:在上面的代码中,我将颜色设置为黑色,以验证代码是否正常工作。我也试过其他颜色来搞笑。

从以下位置更改设置:

settings.Density = new Density(600);

至,

settings.Density = new Density(600);
settings.ColorType = ColorType.TrueColor;
settings.BackgroundColor = new MagickColor(Color.White);

我已经试过了,效果很好。

我在将PDF文件转换为一组图像时遇到了类似的问题。对我来说,解决的办法是不使用设置对象(密度除外(,而是将所需的属性(Format、BackgroundColor、ColorType(应用于图像。

magickReadSettings = new MagickReadSettings();
magickReadSettings.Density = new Density(300);
using (var images = new MagickImageCollection())
{
// Add all the pages of the pdf file to the collection
await images.ReadAsync(pdf, magickReadSettings);
foreach (IMagickImage<ushort> image in images)
{
image.Format = MagickFormat.Png;
image.BackgroundColor = new MagickColor(255, 255, 255, 255);
image.ColorType = ColorType.Grayscale;
}
}

最新更新