Nomad changes
All checks were successful
Deploy fil (kreuzberg) / deploy (push) Successful in 49s

This commit is contained in:
Henrik Jess Nielsen
2026-06-01 23:40:55 +02:00
parent 72b1a0a6ed
commit b4c07d3693
5723 changed files with 1130655 additions and 0 deletions

View File

@@ -0,0 +1,277 @@
```php title="image_extraction_config.php"
<?php
declare(strict_types=1);
/**
* Image Extraction Configuration
*
* This example demonstrates how to configure image extraction from documents,
* including size filtering and OCR on extracted images.
*/
require_once __DIR__ . '/vendor/autoload.php';
use Kreuzberg\Kreuzberg;
use Kreuzberg\Config\ExtractionConfig;
use Kreuzberg\Config\ImageExtractionConfig;
use Kreuzberg\Config\OcrConfig;
echo "Example 1: Basic Image Extraction\n";
echo "=================================\n";
$config1 = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true
)
);
$kreuzberg = new Kreuzberg($config1);
$result = $kreuzberg->extractFile('presentation.pptx');
if ($result->images !== null) {
echo "Total images extracted: " . count($result->images) . "\n";
foreach ($result->images as $i => $image) {
echo "\nImage {$i}:\n";
echo "- Format: {$image->format}\n";
echo "- Size: {$image->width}x{$image->height} pixels\n";
echo "- Page: {$image->pageNumber}\n";
echo "- Data size: " . strlen($image->data) . " bytes\n";
}
}
echo "\n\n";
echo "Example 2: Image Extraction with Size Filter\n";
echo "============================================\n";
$config2 = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
minWidth: 200,
minHeight: 200
)
);
$result2 = (new Kreuzberg($config2))->extractFile('document.pdf');
echo "Filtering images smaller than 200x200 pixels\n";
if ($result2->images !== null) {
echo "Filtered images: " . count($result2->images) . "\n";
}
echo "\n\n";
echo "Example 3: Extract Only Large Images\n";
echo "====================================\n";
$config3 = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
minWidth: 800,
minHeight: 600
)
);
echo "Configured to extract images >= 800x600 pixels\n";
echo "Good for: Photos, large diagrams, full-page scans\n\n";
echo "Example 4: Extract All Images (Including Thumbnails)\n";
echo "===================================================\n";
$config4 = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
minWidth: 50,
minHeight: 50
)
);
echo "Configured to extract images >= 50x50 pixels\n";
echo "Good for: Extracting all images including icons and thumbnails\n\n";
echo "Example 5: Image Extraction with OCR\n";
echo "====================================\n";
$config5 = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
performOcr: true,
minWidth: 100,
minHeight: 100
),
ocr: new OcrConfig(
backend: 'tesseract',
language: 'eng'
)
);
$result5 = (new Kreuzberg($config5))->extractFile('document_with_images.pdf');
if ($result5->images !== null) {
echo "Extracted " . count($result5->images) . " images with OCR:\n\n";
foreach ($result5->images as $i => $image) {
echo "Image {$i} (Page {$image->pageNumber}):\n";
echo "- Size: {$image->width}x{$image->height}\n";
if ($image->ocrResult !== null) {
echo "- OCR Text: " . substr($image->ocrResult->content, 0, 100) . "...\n";
echo "- OCR Text Length: " . strlen($image->ocrResult->content) . " characters\n";
}
echo "\n";
}
}
echo "\n\n";
echo "Example 6: Extract and Save Images to Disk\n";
echo "=========================================\n";
$config6 = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
minWidth: 200,
minHeight: 200
)
);
$result6 = (new Kreuzberg($config6))->extractFile('presentation.pptx');
if ($result6->images !== null) {
$outputDir = 'extracted_images';
if (!is_dir($outputDir)) {
mkdir($outputDir, 0755, true);
}
foreach ($result6->images as $i => $image) {
$filename = "{$outputDir}/image_{$i}_page_{$image->pageNumber}.{$image->format}";
$imageData = base64_decode($image->data);
file_put_contents($filename, $imageData);
echo "Saved: {$filename} ({$image->width}x{$image->height})\n";
}
}
echo "\n\n";
echo "Example 7: File Type-Specific Image Extraction\n";
echo "==============================================\n";
$pdfConfig = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
minWidth: 300,
minHeight: 300,
performOcr: false
)
);
$pptxConfig = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
minWidth: 100,
minHeight: 100,
performOcr: false
)
);
$imageConfig = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
performOcr: true,
minWidth: 50,
minHeight: 50
),
ocr: new OcrConfig(backend: 'tesseract', language: 'eng')
);
echo "PDF Configuration:\n";
echo "- Min size: 300x300 (larger images only)\n";
echo "- OCR: Disabled (PDFs have embedded text)\n\n";
echo "PowerPoint Configuration:\n";
echo "- Min size: 100x100 (include icons/logos)\n";
echo "- OCR: Disabled\n\n";
echo "Image File Configuration:\n";
echo "- Min size: 50x50 (all images)\n";
echo "- OCR: Enabled\n\n";
echo "Example 8: Complete Image Processing Pipeline\n";
echo "=============================================\n";
$config8 = new ExtractionConfig(
imageExtraction: new ImageExtractionConfig(
extractImages: true,
performOcr: true,
minWidth: 200,
minHeight: 200
),
ocr: new OcrConfig(
backend: 'tesseract',
language: 'eng'
)
);
$result8 = (new Kreuzberg($config8))->extractFile('mixed_content.pdf');
if ($result8->images !== null) {
echo "Extracted images: " . count($result8->images) . "\n\n";
foreach ($result8->images as $i => $image) {
echo "Processing Image {$i}:\n";
$isValid = $image->width >= 200 && $image->height >= 200;
echo "- Valid size: " . ($isValid ? 'Yes' : 'No') . "\n";
$filename = "image_{$i}.{$image->format}";
file_put_contents($filename, base64_decode($image->data));
echo "- Saved: {$filename}\n";
if ($image->ocrResult !== null) {
$ocrText = trim($image->ocrResult->content);
if (!empty($ocrText)) {
echo "- OCR text available: " . strlen($ocrText) . " characters\n";
file_put_contents("image_{$i}_ocr.txt", $ocrText);
}
}
$metadata = [
'format' => $image->format,
'width' => $image->width,
'height' => $image->height,
'page' => $image->pageNumber,
'aspect_ratio' => round($image->width / $image->height, 2),
];
file_put_contents("image_{$i}_metadata.json", json_encode($metadata, JSON_PRETTY_PRINT));
echo "- Metadata saved\n\n";
}
}
echo "\nImage Extraction Configuration Parameters:\n";
echo "==========================================\n";
echo "- extractImages: Enable image extraction (default: false)\n";
echo "- performOcr: Run OCR on extracted images (default: false)\n";
echo "- minWidth: Minimum image width in pixels (default: 100)\n";
echo "- minHeight: Minimum image height in pixels (default: 100)\n";
echo "\n\nBest Practices:\n";
echo "===============\n";
echo "- Set minWidth/minHeight to filter out unwanted small images\n";
echo "- Use 200x200 as a good default for meaningful images\n";
echo "- Use 800x600+ for large photos and diagrams only\n";
echo "- Use 50x50 to include all images including icons\n";
echo "- Enable performOcr only when images contain text\n";
echo "- Combine with OCR config for multilingual text in images\n";
echo "- Save images to disk for further processing\n";
echo "\n\nCommon Use Cases:\n";
echo "=================\n";
echo "1. Extract photos from reports: minWidth=800, minHeight=600\n";
echo "2. Extract all graphics: minWidth=100, minHeight=100\n";
echo "3. OCR on images: performOcr=true + OcrConfig\n";
echo "4. Extract logos/icons: minWidth=50, minHeight=50\n";
```