diff --git a/src/V2/FileOperations/Crop.php b/src/V2/FileOperations/Crop.php index 2004e009..ccc3514f 100644 --- a/src/V2/FileOperations/Crop.php +++ b/src/V2/FileOperations/Crop.php @@ -28,9 +28,9 @@ public function __construct(private readonly LocalInputSource $localInput) {} * * @return ExtractedImage extracted image */ - public function extractCrop(CropItem $crop): ExtractedImage + public function extractSingleCrop(CropItem $crop): ExtractedImage { - return $this->extractCrops([$crop])[0]; + return $this->extractMultipleCrops([$crop])[0]; } /** @@ -39,7 +39,7 @@ public function extractCrop(CropItem $crop): ExtractedImage * @param CropItem[] $crops List of crops to extract. * @return CropFiles list of extracted files */ - public function extractCrops(array $crops): CropFiles + public function extractMultipleCrops(array $crops): CropFiles { $imageExtractor = new ImageExtractor($this->localInput); $extractedImages = []; diff --git a/src/V2/FileOperations/Split.php b/src/V2/FileOperations/Split.php index eff71136..8622e0bf 100644 --- a/src/V2/FileOperations/Split.php +++ b/src/V2/FileOperations/Split.php @@ -8,6 +8,7 @@ use Mindee\Input\LocalInputSource; use Mindee\Pdf\ExtractedPdf; use Mindee\Pdf\PdfExtractor; +use ImagickException; /** * V2 Split operation. @@ -44,10 +45,11 @@ public static function expandRange(int $start, int $end): array * @param int[] $split Split range to extract. * * @return ExtractedPdf 2D array of extracted pages + * @throws ImagickException Throws if the image can't be processed. */ public function extractSingleSplit(array $split): ExtractedPdf { - return $this->extractSplits([$split])[0]; + return $this->extractMultipleSplits([$split])[0]; } /** @@ -56,8 +58,9 @@ public function extractSingleSplit(array $split): ExtractedPdf * @param int[][] $splits List of split ranges to extract. * * @return SplitFiles list of extracted files + * @throws ImagickException Throws if the image can't be processed. */ - public function extractSplits(array $splits): SplitFiles + public function extractMultipleSplits(array $splits): SplitFiles { $pdfExtractor = new PdfExtractor($this->localInput); $expandedPageIndexes = array_map(static fn(array $split) => self::expandRange($split[0], $split[1]), $splits); diff --git a/src/V2/Product/Crop/CropItem.php b/src/V2/Product/Crop/CropItem.php index eba0759c..49c5622a 100644 --- a/src/V2/Product/Crop/CropItem.php +++ b/src/V2/Product/Crop/CropItem.php @@ -4,6 +4,9 @@ namespace Mindee\V2\Product\Crop; +use Mindee\Image\ExtractedImage; +use Mindee\Input\LocalInputSource; +use Mindee\V2\FileOperations\Crop; use Mindee\V2\Parsing\Inference\Field\FieldLocation; use Mindee\V2\Product\Extraction\ExtractionResponse; use Stringable; @@ -45,4 +48,14 @@ public function __toString(): string { return "* :Location: $this->location\n :Object Type: $this->objectType"; } + + /** + * @param LocalInputSource $inputSource The input source from which to extract the crop. + * @return ExtractedImage The extracted image. + */ + public function extractFromInputSource(LocalInputSource $inputSource): ExtractedImage + { + $cropper = new Crop($inputSource); + return $cropper->extractSingleCrop($this); + } } diff --git a/src/V2/Product/Crop/CropResult.php b/src/V2/Product/Crop/CropResult.php index 0e8bdc18..ac6289e7 100644 --- a/src/V2/Product/Crop/CropResult.php +++ b/src/V2/Product/Crop/CropResult.php @@ -4,6 +4,9 @@ namespace Mindee\V2\Product\Crop; +use Mindee\Input\LocalInputSource; +use Mindee\V2\FileOperations\Crop; +use Mindee\V2\FileOperations\CropFiles; use Stringable; /** @@ -31,4 +34,14 @@ public function __toString(): string { return "Crops\n=====\n" . implode("\n", $this->crops); } + + /** + * @param LocalInputSource $inputSource The input source from which to extract the pages. + * @return CropFiles The extracted PDFs. + */ + public function extractFromInputSource(LocalInputSource $inputSource): CropFiles + { + $cropper = new Crop($inputSource); + return $cropper->extractMultipleCrops($this->crops); + } } diff --git a/src/V2/Product/Split/SplitRange.php b/src/V2/Product/Split/SplitRange.php index 96fca6b0..e89fec53 100644 --- a/src/V2/Product/Split/SplitRange.php +++ b/src/V2/Product/Split/SplitRange.php @@ -4,6 +4,9 @@ namespace Mindee\V2\Product\Split; +use Mindee\Input\LocalInputSource; +use Mindee\Pdf\ExtractedPdf; +use Mindee\V2\FileOperations\Split; use Mindee\V2\Product\Extraction\ExtractionResponse; use Stringable; @@ -49,4 +52,16 @@ public function __toString(): string return "* :Page Range: $pageRangeStr\n :Document Type: $this->documentType"; } + + /** + * Extracts a single page from the input source based on the specified page range. + * + * @param LocalInputSource $inputSource The input source from which to extract the page. + * @return ExtractedPdf The extracted PDF. + */ + public function extractFromInputSource(LocalInputSource $inputSource): ExtractedPdf + { + $splitter = new Split($inputSource); + return $splitter->extractSingleSplit($this->pageRange); + } } diff --git a/src/V2/Product/Split/SplitResult.php b/src/V2/Product/Split/SplitResult.php index 403d7944..a34919e3 100644 --- a/src/V2/Product/Split/SplitResult.php +++ b/src/V2/Product/Split/SplitResult.php @@ -4,7 +4,12 @@ namespace Mindee\V2\Product\Split; +use Mindee\Input\LocalInputSource; +use Mindee\Pdf\ExtractedPdf; +use Mindee\V2\FileOperations\Split; +use Mindee\V2\FileOperations\SplitFiles; use Stringable; +use ImagickException; /** * Result of a split utility inference. @@ -33,4 +38,15 @@ public function __toString(): string return "Splits\n======\n$splitsStr"; } + + /** + * @param LocalInputSource $inputSource The input source from which to extract the pages. + * @return SplitFiles The extracted PDFs. + * @throws ImagickException Throws if the image can't be processed. + */ + public function extractFromInputSource(LocalInputSource $inputSource): SplitFiles + { + $splitter = new Split($inputSource); + return $splitter->extractMultipleSplits(array_map(static fn(SplitRange $split) => $split->pageRange, $this->splits)); + } } diff --git a/tests/V2/FileOperations/CropFunctional.php b/tests/V2/FileOperations/CropFunctional.php index d0ce95b8..a57b26bd 100644 --- a/tests/V2/FileOperations/CropFunctional.php +++ b/tests/V2/FileOperations/CropFunctional.php @@ -67,9 +67,10 @@ public function testExtractCropsFromImageCorrectly(): void self::assertNotNull($response); self::assertCount(2, $response->inference->result->crops); - - $cropOperation = new Crop($inputSource); - $extractedImages = $cropOperation->extractCrops($response->inference->result->crops); + self::assertInstanceOf(CropResponse::class, $response); + $extractedImages = $response->inference->result->extractFromInputSource($inputSource); + $extractedImage0 = $response->inference->result->crops[0]->extractFromInputSource($inputSource); + self::assertEquals($extractedImage0, $extractedImages[0]); self::assertCount(2, $extractedImages); self::assertSame('default_sample.jpg_page0-0.jpg', $extractedImages[0]->filename); @@ -100,7 +101,7 @@ public function testExtractCropsFromEachPdfPageCorrectly(): void $response = $this->client->enqueueAndGetResult(CropResponse::class, $inputSource, $cropParams); $cropOperation = new Crop($inputSource); - $extractedImages = $cropOperation->extractCrops($response->inference->result->crops); + $extractedImages = $cropOperation->extractMultipleCrops($response->inference->result->crops); self::assertCount(5, $extractedImages); self::assertSame('multipage_sample.pdf_page0-0.jpg', $extractedImages[0]->filename); diff --git a/tests/V2/FileOperations/CropTest.php b/tests/V2/FileOperations/CropTest.php index 0f6e1022..8b934721 100644 --- a/tests/V2/FileOperations/CropTest.php +++ b/tests/V2/FileOperations/CropTest.php @@ -28,7 +28,7 @@ public function testProcessesSinglePageCropSplitCorrectly(): void $doc = $localResponse->deserializeResponse(CropResponse::class); $cropOperation = new Crop($inputSample); - $extractedCrops = $cropOperation->extractCrops($doc->inference->result->crops); + $extractedCrops = $cropOperation->extractMultipleCrops($doc->inference->result->crops); self::assertCount(1, $extractedCrops); @@ -49,7 +49,7 @@ public function testProcessesMultiPageReceiptSplitCorrectly(): void $doc = $localResponse->deserializeResponse(CropResponse::class); $cropOperation = new Crop($inputSample); - $extractedCrops = $cropOperation->extractCrops($doc->inference->result->crops); + $extractedCrops = $cropOperation->extractMultipleCrops($doc->inference->result->crops); self::assertCount(2, $extractedCrops); diff --git a/tests/V2/FileOperations/SplitFunctional.php b/tests/V2/FileOperations/SplitFunctional.php index 16ca313e..d3b7de4a 100644 --- a/tests/V2/FileOperations/SplitFunctional.php +++ b/tests/V2/FileOperations/SplitFunctional.php @@ -13,6 +13,7 @@ use Mindee\V2\Product\Split\SplitResponse; use PHPUnit\Framework\TestCase; use TestingUtilities; +use ImagickException; use function count; use function sprintf; @@ -60,6 +61,9 @@ private function checkFindocReturn(ExtractionResponse $findocResponse): void self::assertGreaterThan(0, $totalAmount->value); } + /** + * @throws ImagickException + */ public function testExtractSplitsFromPdfCorrectly(): void { $inputSource = new PathInput(TestingUtilities::getV2ProductDir() . '/split/default_sample.pdf'); @@ -70,10 +74,10 @@ public function testExtractSplitsFromPdfCorrectly(): void self::assertNotNull($response); self::assertCount(2, $response->inference->result->splits); - $splitOperation = new Split($inputSource); - $extractedSplits = $splitOperation->extractSplits( - array_map(static fn($s) => $s->pageRange, $response->inference->result->splits) - ); + self::assertInstanceof(SplitResponse::class, $response); + $extractedSplits = $response->inference->result->extractFromInputSource($inputSource); + $extractedSplit0 = $response->inference->result->splits[0]->extractFromInputSource($inputSource); + self::assertEquals($extractedSplit0, $extractedSplits[0]); self::assertCount(2, $extractedSplits); self::assertSame('default_sample_001-001.pdf', $extractedSplits[0]->filename); diff --git a/tests/V2/FileOperations/SplitTest.php b/tests/V2/FileOperations/SplitTest.php index 5591c26a..feceaa17 100644 --- a/tests/V2/FileOperations/SplitTest.php +++ b/tests/V2/FileOperations/SplitTest.php @@ -31,7 +31,7 @@ public function testProcessesSinglePageSplitCorrectly(): void $splitOperation = new Split($inputSample); $splits = $doc->inference->result->splits; - $extractedSplits = $splitOperation->extractSplits(array_map(static fn($s) => $s->pageRange, $splits)); + $extractedSplits = $splitOperation->extractMultipleSplits(array_map(static fn($s) => $s->pageRange, $splits)); self::assertCount(1, $extractedSplits); @@ -47,7 +47,7 @@ public function testProcessesMultiPageReceiptSplitCorrectly(): void $splitOperation = new Split($inputSample); $splits = $doc->inference->result->splits; - $extractedSplits = $splitOperation->extractSplits(array_map(static fn($s) => $s->pageRange, $splits)); + $extractedSplits = $splitOperation->extractMultipleSplits(array_map(static fn($s) => $s->pageRange, $splits)); self::assertCount(3, $extractedSplits);