11from __future__ import annotations
22
3- import io
43from pathlib import Path
5- from typing import Any
4+ from typing import Any , BinaryIO
65
76from mindee .dependencies .checkers import PILLOW_AVAILABLE
87from mindee .dependencies .decorators import requires_pillow
98from mindee .error .mindee_error import MindeeError
10- from mindee .input .file_input import FileInput
11- from mindee .input .local_input_source import LocalInputSource
9+ from mindee .input .bytes_input import BytesInput
1210from mindee .logger import logger
1311
1412if PILLOW_AVAILABLE :
2119class ExtractedImage :
2220 """Generic class for image extraction."""
2321
22+ buffer : BinaryIO
2423 _page_id : int
2524 """Id of the page the image was extracted from."""
2625 _element_id : int
@@ -29,27 +28,33 @@ class ExtractedImage:
2928 """Name of the file the image was extracted from."""
3029
3130 def __init__ (
32- self , input_source : LocalInputSource , page_id : int , element_id : int
31+ self ,
32+ img_byte_stream : BinaryIO ,
33+ orig_filename : str ,
34+ orig_extension : str ,
35+ page_id : int ,
36+ element_id : int ,
3337 ) -> None :
3438 """
3539 Initialize the ExtractedImage with a buffer and an internal file name.
3640
37- :param input_source: Local source for input.
41+ :param img_byte_stream: The raw image bytes.
42+ :param orig_filename: Name of the file the image was extracted from.
3843 :param page_id: ID of the page the element was found on.
3944 :param element_id: ID of the element in a page.
4045 """
41- self .buffer = io . BytesIO ( input_source . file_object . read ())
42- self .buffer . name = input_source . filename
43- self . filename = input_source . filename
44- if input_source . is_pdf ( ):
46+ self .buffer = img_byte_stream
47+ self .filename = orig_filename
48+
49+ if orig_extension . lower (). endswith ( "pdf" ):
4550 extension = "jpg"
4651 else :
47- extension = Path ( input_source . filename ). resolve (). suffix
52+ extension = orig_extension . lower ()
4853 self .buffer .seek (0 )
4954 pg_number = str (page_id ).zfill (3 )
5055 elem_number = str (element_id ).zfill (3 )
5156 self .internal_file_name = (
52- f"{ input_source . filename } _page{ pg_number } -{ elem_number } .{ extension } "
57+ f"{ orig_filename } _page{ pg_number } -{ elem_number } .{ extension } "
5358 )
5459 self ._page_id = page_id
5560 self ._element_id = 0 if element_id is None else element_id
@@ -76,14 +81,14 @@ def save_to_file(self, output_path: Path | str):
7681 print (e )
7782 raise MindeeError (f"Could not save file { Path (output_path ).name } ." ) from e
7883
79- def as_input_source (self ) -> FileInput :
84+ def as_input_source (self ) -> BytesInput :
8085 """
8186 Return the file as a Mindee-compatible BufferInput source.
8287
8388 :returns: A BufferInput source.
8489 """
8590 self .buffer .seek (0 )
86- return FileInput (self .buffer )
91+ return BytesInput (self .buffer . read (), self . internal_file_name )
8792
8893 @property
8994 def page_id (self ):
0 commit comments