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