PDF: Использование MRC сжатия для кодирования изображений документов в PDF формат
В этом разделе
1. Общие принципы и применимость MRC сжатия
MRC (Mixed Raster Content) сжатие - технология сжатия цветного изображения путем разделения изображения на слои с существенно различными характеристиками. В зависимости от характеристик слоя он сжимается с помощью наиболее эффективного и аккуратного алгоритма сжатия.
Наилучшим методом достижения максимальной степени сжатия при сохранении приемлемого качества является сжатие различных областей изображения в соответствии с их индивидуальными характеристиками. Двухуровневые детали, связанные с текстом и линейной графикой, будут сжиматься с использованием подхода, в котором большое внимание уделяется сохранению деталей и структуры входных изображений. Непрерывные тоновые изображения и многоуровневые непрерывные тоновые цвета сжимаются с помощью подхода, в котором большое внимание уделяется сохранению плавности и точности цветов.
Вот C#/VB.NET код, который демонстрирует, как изображение разделяется на слои с помощью алгоритма MRC сжатия:
MRC сжатие применимо только для цветных изображений и идеально подходит для сжатия отсканированных цветных документов.
Сжатие эффективно работает с цветными изображениями документов с текстом, линейной графикой и полноцветными изображениями. MRC сжатие использует различные алгоритмы сжатия для разных видов графики, что дает наилучшие результаты сжатия, в отличие от ситуации, когда ко всему изображению применяется один алгоритм сжатия.
2. Использование MRC сжатия для кодирования изображений в PDF формат
MRC сжатие используется для кодирования одного или нескольких цветных изображений в PDF формат. Представленный алгоритм обеспечивает сжатие с потерями.
Сборка Vintasoft.Imaging.Pdf.Mrc.dll содержит классы, отвечающие за кодирование изображений в PDF с использованием MRC сжатия:
Свойство
PdfMrcCompressionSettings.EnableMrcCompression определяет необходимость использования MRC сжатия для кодирования изображения в PDF формат. Значение False означает, что класс
PdfMrcEncoder будет выполнять кодирование изображения методами базового класса
PdfEncoder, т. е. используя обычный (только для изображений) алгоритм сжатия.
Следующие плагины обязательны для использования MRC сжатия:
- VintaSoft PDF .NET Plug-in: Vintasoft.Imaging.Pdf.dll и Vintasoft.Imaging.Pdf.Mrc.dll.
- VintaSoft Document Cleanup .NET Plug-in: Vintasoft.Imaging.DocCleanup.dll.
Для достижения наилучших результатов сжатия и качества рекомендуется использовать следующие плагины:
- VintaSoft JPEG2000 .NET Plug-in: Vintasoft.Imaging.Jpeg2000.dll.
- VintaSoft JBIG2 .NET Plug-in: Vintasoft.Imaging.Jbig2.dll.
В следующем примере показано, как закодировать коллекцию изображений в PDF документ с помощью MRC сжатия:
public static void EncodeImagesUseMrc(Vintasoft.Imaging.ImageCollection images, string pdfFilename)
{
// create PDF MRC encoder
Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder encoder =
new Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder();
// set MRC compression settings
SetCompressionSettings(encoder.MrcCompressionSettings);
// save images to PDF use MRC compression
images.SaveSync(pdfFilename, encoder);
}
private static void SetCompressionSettings(Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings settings)
{
// background layer
settings.CreateBackgroundLayer = true;
settings.BackgroundLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg | Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.BackgroundLayerCompressionSettings.JpegQuality = 35;
// images layer, images placed to background layer
settings.ImageSegmentation =
new Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand();
settings.CreateImagesLayer = false;
// mask layer
settings.HiQualityMask = true;
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2;
settings.MaskCompressionSettings.Jbig2Settings.Lossy = true;
// front layer
settings.CreateFrontLayer = true;
settings.HiQualityFrontLayer = true;
settings.FrontLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.FrontLayerCompressionSettings.JpegQuality = 25;
}
Public Shared Sub EncodeImagesUseMrc(images As Vintasoft.Imaging.ImageCollection, pdfFilename As String)
' create PDF MRC encoder
Dim encoder As New Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder()
' set MRC compression settings
SetCompressionSettings(encoder.MrcCompressionSettings)
' save images to PDF use MRC compression
images.SaveSync(pdfFilename, encoder)
End Sub
Private Shared Sub SetCompressionSettings(settings As Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings)
' background layer
settings.CreateBackgroundLayer = True
settings.BackgroundLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.BackgroundLayerCompressionSettings.JpegQuality = 35
' images layer, images placed to background layer
settings.ImageSegmentation = New Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand()
settings.CreateImagesLayer = False
' mask layer
settings.HiQualityMask = True
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2
settings.MaskCompressionSettings.Jbig2Settings.Lossy = True
' front layer
settings.CreateFrontLayer = True
settings.HiQualityFrontLayer = True
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.FrontLayerCompressionSettings.JpegQuality = 25
End Sub
2.1. Слои и алгоритмы, используемые при MRC сжатии
При MRC сжатии используется четыре слоя:
- Фоновый слой (полноцветное изображение) - включает фон, фоновый шум и другие графические элементы, которые не были классифицированы как текст, графический объект или рисунок.
- Слой изображений (набор полноцветных изображений) - включает полноцветные изображения.
- Слой маски (черно-белое изображение) - включает текст и графические объекты.
- Лицевой слой (палитровое изображение) - содержит информацию о цветах для слоя маски, дает возможность сохранить цвет текста и графических объектов.
Параметры и алгоритм сжатия для каждого слоя задаются индивидуально, каждый слой может быть отключен.
Для анализа исходного изображения используются следующие дополнительные алгоритмы:
- Алгоритм сегментации изображения, реализованный в классе ImageSegmentationCommand из сборки Vintasoft.Imaging.DocClenup.dll, необходим для поиска полноцветных картинок в исходном изображении и построения слоя изображений.
- Алгоритм бинаризации, реализованный в классе ChangePixelFormatToBlackWhiteCommand из сборки Vintasoft.Imaging.dll, необходим для бинаризации исходного изображения и построения слоя маски, содержащего текст и графические объекты.
2.2. Настройки сжатия для фонового слоя
Следующие свойства определяют, как компоновать и сжимать фоновый слой:
Фоновый слой обычно хранит не очень важную информацию, поэтому его рекомендуется сжимать с помощью алгоритмов сжатия с потерями, таких как Jpeg+ZIP или Jpeg2000.
2.3. Настройки сжатия для слоя изображений
Следующие свойства определяют, как компоновать и сжимать слой изображений:
-
PdfMrcCompressionSettings.CreateImagesLayer - определяет, должен ли быть создан слой изображений.
Важно!
Если этот слой не будет создан, то все изображения и графические элементы будут помещены в фоновый слой, что может привести к значительной потере качества изображений и графических элементов, расположенных на исходном изображении.
- PdfMrcCompressionSettings.ImageSegmentation - определяет команду, которая реализует поиск областей, содержащих полноцветные изображения.
- PdfMrcCompressionSettings.ImageRegions - определяет массив прямоугольников на изображении документа, содержащего полноцветные изображения. Это свойство имеет больший приоритет, чем свойство PdfMrcCompressionSettings.ImageSegmentation, т.е. в случае, если значение свойства PdfMrcCompressionSettings.ImageRegions определено пользователем, то сегментация исходного изображения выполняться не будет.
- PdfMrcCompressionSettings.ImagesLayerCompression - определяет алгоритм, который должен использоваться для сжатия этого слоя.
- PdfMrcCompressionSettings.ImagesLayerCompressionSettings - определяет настройки алгоритма сжатия.
Обработку и поиск полноцветных изображений можно отключить, установив значение свойств
PdfMrcCompressionSettings.ImageSegmentation и
PdfMrcCompressionSettings.ImageRegions равным null.
Слой изображений хранит полноцветные изображения, поэтому рекомендуется сжимать его с помощью алгоритмов Jpeg+ZIP или Jpeg2000 с приемлемой потерей качества.
Важно!
Если значение свойства
PdfMrcCompressionSettings.CreateImagesLayer установлено в False (полноцветные изображения помещаются на фоновый слой), то качеством закодированных изображений можно управлять с помощью настроек сжатия фонового слоя:
PdfMrcCompressionSettings.BackgroundLayerCompression,
PdfMrcCompressionSettings.BackgroundLayerCompressionSettings.
ImageSegmentationCommand имеет различные настройки, позволяющие установить качество, чувствительность и точность поиска полноцветных изображений.
2.4. Настройки сжатия для слоя маски
Следующие свойства определяют, как компоновать и сжимать слой маски
Важно!
Прямоугольник, который распознается как полноцветное изображение, будет исключен из слоя маски (см. свойства
PdfMrcCompressionSettings.ImageRegions и
PdfMrcCompressionSettings.ImageSegmentation).
По умолчанию для создания слоя маски используется бинаризация изображения с автоматическим определением порога, и в большинстве случаев она обеспечивает хорошие результаты сжатия. Для получения наилучших результатов сжатия следует использовать различные алгоритмы бинаризации для разных типов изображений документов.
Слой маски хранит черно-белое изображение, поэтому рекомендуется сжимать его с помощью алгоритма сжатия Jbig2 или CCITT.
2.5. Настройки сжатия для лицевого слоя
Следующие свойства определяют, как компоновать и сжимать лицевой слой:
Лицевой слой хранит палитровое изображение, поэтому его можно сжимать с помощью алгоритма ZIP. Однако в случае, когда текст имеет большое количество различных цветов или применяется высокое цветовое разрешение (
PdfMrcCompressionSettings.HiQualityFrontLayer), то наилучшие результаты с приемлемой потерей качества дают алгоритмы сжатия Jpeg+ZIP или Jpeg2000.
2.6. Рекомендуемые параметры MRC сжатия для различных типов изображений документов
Изображения документов можно классифицировать по следующим критериям:
- Изображения документов с текстом и рисунками.
- Изображения документов, содержащие только текст.
Вот C#/VB.NET код, который демонстрирует, как сжать изображения документов, содержащие текст и картинки, используя алгоритм MRC сжатия и получая в результате изображения высокого качества:
public static void SetSetting_DocumentWithImagesHiQuality(
Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings settings)
{
settings.CreateBackgroundLayer = true;
settings.BackgroundLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.BackgroundLayerCompressionSettings.JpegQuality = 60;
settings.ImageSegmentation =
new Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand();
settings.CreateImagesLayer = false;
settings.HiQualityMask = true;
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2;
settings.MaskCompressionSettings.Jbig2Settings.Lossy = true;
settings.CreateFrontLayer = true;
settings.HiQualityFrontLayer = true;
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 300 * 3;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType =
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy;
}
Public Shared Sub SetSetting_DocumentWithImagesHiQuality(settings As Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings)
settings.CreateBackgroundLayer = True
settings.BackgroundLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.BackgroundLayerCompressionSettings.JpegQuality = 60
settings.ImageSegmentation = New Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand()
settings.CreateImagesLayer = False
settings.HiQualityMask = True
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2
settings.MaskCompressionSettings.Jbig2Settings.Lossy = True
settings.CreateFrontLayer = True
settings.HiQualityFrontLayer = True
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 300 * 3
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType = Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy
End Sub
Вот C#/VB.NET код, который демонстрирует, как сжать изображения документов, содержащие текст и картинки, используя алгоритм MRC сжатия и получая в результате изображения нормального качества:
public static void SetSetting_DocumentWithImagesNormal(
Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings settings)
{
settings.CreateBackgroundLayer = true;
settings.BackgroundLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.BackgroundLayerCompressionSettings.JpegQuality = 35;
settings.ImageSegmentation =
new Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand();
settings.CreateImagesLayer = false;
settings.HiQualityMask = true;
settings.MaskCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jbig2;
settings.MaskCompressionSettings.Jbig2Settings.Lossy = true;
settings.CreateFrontLayer = true;
settings.HiQualityFrontLayer = true;
settings.FrontLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.FrontLayerCompressionSettings.JpegQuality = 25;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 400 * 3;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType =
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy;
}
Public Shared Sub SetSetting_DocumentWithImagesNormal(settings As Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings)
settings.CreateBackgroundLayer = True
settings.BackgroundLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.BackgroundLayerCompressionSettings.JpegQuality = 35
settings.ImageSegmentation = New Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand()
settings.CreateImagesLayer = False
settings.HiQualityMask = True
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2
settings.MaskCompressionSettings.Jbig2Settings.Lossy = True
settings.CreateFrontLayer = True
settings.HiQualityFrontLayer = True
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.FrontLayerCompressionSettings.JpegQuality = 25
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 400 * 3
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType = Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy
End Sub
Вот C#/VB.NET код, который демонстрирует, как сжать изображения документов, содержащие текст и картинки, используя алгоритм MRC сжатия и получая в результате изображения с высокой степенью сжатия:
public static void SetSetting_DocumentWithImagesHiCompression(
Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings settings)
{
settings.CreateBackgroundLayer = true;
settings.BackgroundLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.BackgroundLayerCompressionSettings.JpegQuality = 20;
settings.ImageSegmentation =
new Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand();
settings.CreateImagesLayer = false;
settings.HiQualityMask = false;
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2;
settings.MaskCompressionSettings.Jbig2Settings.Lossy = true;
settings.CreateFrontLayer = true;
settings.HiQualityFrontLayer = false;
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Zip;
}
Public Shared Sub SetSetting_DocumentWithImagesHiCompression(settings As Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings)
settings.CreateBackgroundLayer = True
settings.BackgroundLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.BackgroundLayerCompressionSettings.JpegQuality = 20
settings.ImageSegmentation = New Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand()
settings.CreateImagesLayer = False
settings.HiQualityMask = False
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2
settings.MaskCompressionSettings.Jbig2Settings.Lossy = True
settings.CreateFrontLayer = True
settings.HiQualityFrontLayer = False
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Zip
End Sub
Вот C#/VB.NET код, который демонстрирует, как сжать изображения документов, содержащие только текст, используя алгоритм MRC сжатия и получая в результате изображения высокого качества:
Изображения документов, не содержащие полноцветных изображений, высокого качества:
public static void SetSetting_DocumentNoImagesHiQuality(
Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings settings)
{
settings.CreateBackgroundLayer = true;
settings.BackgroundLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.BackgroundLayerCompressionSettings.JpegQuality = 30;
settings.ImageSegmentation = null;
settings.CreateImagesLayer = false;
settings.HiQualityMask = true;
settings.MaskCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jbig2;
settings.MaskCompressionSettings.Jbig2Settings.Lossy = true;
settings.CreateFrontLayer = true;
settings.HiQualityFrontLayer = true;
settings.FrontLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 300 * 3;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType =
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy;
}
Public Shared Sub SetSetting_DocumentNoImagesHiQuality(settings As Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings)
settings.CreateBackgroundLayer = True
settings.BackgroundLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.BackgroundLayerCompressionSettings.JpegQuality = 30
settings.ImageSegmentation = Nothing
settings.CreateImagesLayer = False
settings.HiQualityMask = True
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2
settings.MaskCompressionSettings.Jbig2Settings.Lossy = True
settings.CreateFrontLayer = True
settings.HiQualityFrontLayer = True
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 300 * 3
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType = Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy
End Sub
Вот C#/VB.NET код, который демонстрирует, как сжать изображения документов, содержащие только текст, используя алгоритм MRC сжатия и получая в результате изображения с нормальным качеством:
public static void SetSetting_DocumentNoImagesNormal(
Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings settings)
{
settings.CreateBackgroundLayer = true;
settings.BackgroundLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.BackgroundLayerCompressionSettings.JpegQuality = 25;
settings.ImageSegmentation = null;
settings.CreateImagesLayer = false;
settings.HiQualityMask = true;
settings.MaskCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jbig2;
settings.MaskCompressionSettings.Jbig2Settings.Lossy = true;
settings.CreateFrontLayer = true;
settings.HiQualityFrontLayer = false;
settings.FrontLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 350 * 3;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType =
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy;
}
Public Shared Sub SetSetting_DocumentNoImagesNormal(settings As Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings)
settings.CreateBackgroundLayer = True
settings.BackgroundLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.BackgroundLayerCompressionSettings.JpegQuality = 25
settings.ImageSegmentation = Nothing
settings.CreateImagesLayer = False
settings.HiQualityMask = True
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2
settings.MaskCompressionSettings.Jbig2Settings.Lossy = True
settings.CreateFrontLayer = True
settings.HiQualityFrontLayer = False
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 350 * 3
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType = Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy
End Sub
Вот C#/VB.NET код, который демонстрирует, как сжать изображения документов, содержащие только текст, используя алгоритм MRC сжатия и получая в результате изображения с высокой степенью сжатия:
public static void SetSetting_DocumentNoImagesHiCompression(
Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings settings)
{
settings.CreateBackgroundLayer = true;
settings.BackgroundLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.BackgroundLayerCompressionSettings.JpegQuality = 20;
settings.ImageSegmentation = null;
settings.CreateImagesLayer = false;
settings.HiQualityMask = false;
settings.MaskCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jbig2;
settings.MaskCompressionSettings.Jbig2Settings.Lossy = true;
settings.CreateFrontLayer = true;
settings.HiQualityFrontLayer = false;
settings.FrontLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 450 * 3;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType =
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy;
}
Public Shared Sub SetSetting_DocumentNoImagesHiCompression(settings As Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings)
settings.CreateBackgroundLayer = True
settings.BackgroundLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.BackgroundLayerCompressionSettings.JpegQuality = 20
settings.ImageSegmentation = Nothing
settings.CreateImagesLayer = False
settings.HiQualityMask = False
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2
settings.MaskCompressionSettings.Jbig2Settings.Lossy = True
settings.CreateFrontLayer = True
settings.HiQualityFrontLayer = False
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 450 * 3
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType = Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy
End Sub
Примеры сжатия. Визуальное сравнение качества сжатия.
Визуальное сравнение качества сжатия проводилось с использованием 4 различных изображений:
-
rasterized_noImages
- Растеризованная страница PDF документа без полноцветных изображений. Размер 3450x4528, 24 бита. Содержит таблицы, диаграммы, текст разных цветов.
-
rasterized_withImages
- Растеризованная страница PDF документа с полноцветными изображениями. Размер 2158x3071, 24 бита. Содержит таблицы, графисеские объекты, текст разных цветов.
-
scanned_noImages
- Отсканированная страница документа без полноцветных изображений. Размер 4288x3010, 24 бит. Содержит таблицы, графические объекты.
-
scanned_withImages
- Отсканированная страница документа с полноцветным изображением. Размер 1276x1728, 24 бита. Содержит полноцветные изображения, графические объекты, текст разных цветов.
После применения MRC сжатия с выбранными настройками исходные изображения были сжаты с помощью кодеков JPEG и JPEG2000, чтобы размер сжатых исходных файлов соответствовал размеру MRC сжатого файла.
Сравнение фрагментов сжатых изображений:
rasterized_noImages
, 42.79MB без сжатия:
PNG
3.664MB
1:12
|
|
|
PDF MRC
0.246MB
1:174
|
|
|
JPEG2000
0.252MB
1:170
|
|
|
JPEG
0.379MB
1:113
|
|
|
Сравнение фрагментов сжатых изображений:
rasterized_withImages
, 20.13MB без сжатия:
PNG
3.472MB
1:6
|
|
|
PDF MRC
0.144MB
1:139
|
|
|
JPEG2000
0.147MB
1:137
|
|
|
JPEG
0.170MB
1:118
|
|
|
Сравнение фрагментов сжатых изображений:
scanned_noImages
, 36.93MB без сжатия:
PNG
4.639MB
1:8
|
|
|
PDF MRC
0.205MB
1:180
|
|
|
JPEG2000
0.205MB
1:180
|
|
|
JPEG
0.212MB
1:174
|
|
|
Сравнение фрагментов сжатых изображений:
scanned_withImages
, 6.61MB без сжатия:
PNG
2.75MB
1:2.4
|
|
PDF MRC
0.112MB
1:59
|
|
JPEG2000
0.114MB
1:58
|
|
JPEG
0.118MB
1:56
|
|