使用 Imagemagick.NET 删除透明度
Removing Transparency using Imagemagick.NET
我编写的软件包的一部分采用二进制编码的 PDF,将其转换为位图,并将其保存到数据库中的 blob。我发现虽然在 PDF 格式的原始文件中不能立即看到它,但文档中的透明度在转换后的位图中是完全可见的。
我见过 other posts 命令行版本的 imagemagick 可以 "flatten" 删除透明层的图像。这可以通过 .NET 包以某种方式完成吗?如何在保存位图之前去除透明度?我需要将其保留为位图,因为它是标签打印机普遍认可的格式。
/// <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())
{
// 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);
}
}
}
我尝试过使用不同的方法来调整透明层或背景着色,但都没有成功。
//image.BackgroundColor = new ColorMono(false);
//image.TransparentChroma(new MagickColor(0, 0, 0), new MagickColor(0, 0, 0));
//image.TransparentChroma(new ColorRGB(0, 0, 0), new ColorRGB(65535, 65535, 65535));
//image.BackgroundColor = new MagickColor("#fff");
//image.BackgroundColor = new MagickColor("#ffffff");
//image.BackgroundColor = new MagickColor("#ffffffffffff");
//image.Settings.BackgroundColor.A = 0;
尝试移除 Alpha 组件,并根据输出设置背景颜色:
image.Alpha(AlphaOption.Remove);
我编写的软件包的一部分采用二进制编码的 PDF,将其转换为位图,并将其保存到数据库中的 blob。我发现虽然在 PDF 格式的原始文件中不能立即看到它,但文档中的透明度在转换后的位图中是完全可见的。
我见过 other posts 命令行版本的 imagemagick 可以 "flatten" 删除透明层的图像。这可以通过 .NET 包以某种方式完成吗?如何在保存位图之前去除透明度?我需要将其保留为位图,因为它是标签打印机普遍认可的格式。
/// <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())
{
// 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);
}
}
}
我尝试过使用不同的方法来调整透明层或背景着色,但都没有成功。
//image.BackgroundColor = new ColorMono(false);
//image.TransparentChroma(new MagickColor(0, 0, 0), new MagickColor(0, 0, 0));
//image.TransparentChroma(new ColorRGB(0, 0, 0), new ColorRGB(65535, 65535, 65535));
//image.BackgroundColor = new MagickColor("#fff");
//image.BackgroundColor = new MagickColor("#ffffff");
//image.BackgroundColor = new MagickColor("#ffffffffffff");
//image.Settings.BackgroundColor.A = 0;
尝试移除 Alpha 组件,并根据输出设置背景颜色:
image.Alpha(AlphaOption.Remove);