2

PDFから画像の「クラスター」を抽出することを目指しています。したがって、2 つ以上の画像がすべて互いに接触している場合、または 1 ~ 2 ピクセル以内である場合、それらを透明な背景を持つ 1 つの画像として抽出したいと考えています。理想的には、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 に答える