如何从pdf文件中提取图像的“簇”?

时间:2012-08-03 21:59:52

标签: image pdf metadata grouping

我的目标是从pdf中提取“聚类”图像。因此,如果两个或多个图像全部相互接触,或者在1-2个像素内,我希望它们被提取为具有透明背景的一个图像。理想情况下,Linux解决方案是最佳的。谢谢!

2 个答案:

答案 0 :(得分:2)

恕我直言,一般情况下这是不可能的......

从PDF页面中提取图像通常会以原始大小恢复它们。但是,在PDF页面中,它们可能已嵌入了应用的缩放或缩放因子。因此,每个图像在页面上的分辨率可能不同。

虽然它可能只是出现,好像图像彼此“接触”以填充另一个矩形(或任何形状),一旦它们被提取,它们可能不会“适合”在一起更多。此外,图像的一部分可能会覆盖其他部分,并且在提取之后,每个图像将再次以其完整大小可见。

...除非您只是对PDF页面进行裁剪截图。

答案 1 :(得分:1)

我认为Docotic.Pdf library可能是适合您案例的正确工具。

图书馆可以“绘画”提取图像,即保留缩放/旋转。对于每个绘制的图像,也会检索位置和大小。

因此,您可以使用该库来检索页面上绘制的图像,并分析每个图像的坐标以查找/分组图像集。

下面是一个示例代码,演示如何“绘制”图像及其坐标。

public static void extractImagesAndCoordinates(string file)
{
    int imageIndex = 0;
    using (PdfDocument pdf = new PdfDocument(file))
    {
        foreach (PdfPage page in pdf.Pages)
        {
            PdfCollection<PdfPaintedImage> paintedImages = page.GetPaintedImages();
            foreach (PdfPaintedImage image in paintedImages)
            {
                Console.Out.WriteLine("Position {0}, {1}. Size {2}x{3}",
                    image.Position.X, image.Position.Y, image.Size.Width, image.Size.Height);

                string outImagePath = string.Format("image{0}.png", imageIndex++);
                image.SaveAsPainted(outImagePath, PdfExtractedImageFormat.Png);
            }
        }
    }
}

免责声明:我为图书馆的供应商工作。