2

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

4

2 回答 2

2

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

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

尽管看起来好像图像彼此“接触”以填充另一个矩形(或任何形状),但一旦提取它们,它们可能不再“适合”在一起。此外,图像的一部分可能会覆盖其他部分,并且在提取后,每个图像将再次以其完整尺寸可见。

...除非您只是截取 PDF 页面的屏幕截图。

于 2012-08-03T23:07:39.793 回答
1

我认为Docotic.Pdf 库可能是适合您情况的正确工具。

该库可以“按绘制”提取图像,即保留缩放/旋转。并且还检索每个绘制的图像位置和大小。

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

下面是一个示例代码,展示了如何提取“如画”的图像及其坐标。

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);
            }
        }
    }
}

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

于 2012-08-04T07:30:06.343 回答