This commit is contained in:
277
docs/snippets/php/configuration/image_extraction_config.php
Normal file
277
docs/snippets/php/configuration/image_extraction_config.php
Normal 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";
|
||||
```
|
||||
Reference in New Issue
Block a user