Удаление прозрачности с помощью Imagemagick.NET

Jaberwocky спросил: 07 октября 2018 в 11:13 в: c#

Часть программного пакета, который я написал, принимает двоичный кодированный PDF, преобразует его в растровое изображение и сохраняет его в BLOB-объект в БД. Я обнаружил, что хотя он не сразу виден в оригинале в виде PDF, в документе есть прозрачность, которая полностью видна в преобразованном растровом изображении.

Я видел другие сообщения , где версия imagemagick для командной строки может" сгладить"изображение, чтобы удалить слои прозрачности. Можно ли это как-то сделать с помощью пакета .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;

0 ответов