DownsampleImages

文档管理、图像

说明

降低有效分辨率超过 MaxDPI 的嵌入图像 XObject 的分辨率。每个候选图像都会被解码,在保持宽高比的同时重新采样,并在 Quality 大于 0 时重新编码为 DCTDecode (JPEG),或在 Quality 为 0 时重新编码为无损 FlateDecode (PNG);图像流以及 /Filter、/Width 和 /Height 条目会被原位重写

语法

Delphi

Function TPDFlib.DownsampleImages(MaxDPI, Quality, Filter: Integer): Integer;

参数

MaxDPI以 DPI 表示的分辨率阈值;估算有效分辨率高于此值的图像会被重新采样。小于 24 的值会中止调用
Quality用于重新编码的 JPEG 压缩质量,范围为 1 至 100;传入 0 可无损重新编码为 PNG
Filter0 选择方框滤镜,对源像素块取平均值;其他任意值选择双线性重新采样

返回值

已重写的图像 XObject 数量;当 MaxDPI 小于 24 或没有图像超过阈值时返回 0

备注

有效分辨率根据图像声明的像素宽度相对于 Letter 宽度页面进行估算,因此该处理较为保守;如有疑问,不会处理印刷质量图像

声明像素小于 8 x 8 的图像、无法解码的图像,以及重新采样后大小不会小于原图的图像都会被跳过,且不会导致调用失败

示例

PDF.LoadFromFile('scan.pdf', '');
PDF.DownsampleImages(150, 80, 0);
PDF.SaveToFile('scan-compressed.pdf');