Skip to content

ratiopath.ray.datasource.VipsTiffDatasink

Bases: RowBasedFileDatasink

A datasink for saving image data as TIFF files using libvips.

This datasink uses pyvips to efficiently save image data with support for various TIFF formats, including BigTIFF.

Source code in ratiopath/ray/datasource/vips_tiff_datasink.py
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class VipsTiffDatasink(RowBasedFileDatasink):
    """A datasink for saving image data as TIFF files using libvips.

    This datasink uses pyvips to efficiently save image data with support for
    various TIFF formats, including BigTIFF.
    """

    def __init__(
        self,
        path: str,
        data_column: str,
        options_column: str | None = None,
        default_options: dict[str, Any] | None = None,
        **file_datasink_kwargs: Any,
    ) -> None:
        """Initialize a VipsTIFFDatasink.

        Args:
            path: Output path for the TIFF files
            data_column: Column name containing image data (numpy array)
            options_column: Optional column name containing TIFF save options as dict
            default_options: Default options for TIFF saving
            **file_datasink_kwargs: Additional arguments for the file datasink
        """
        super().__init__(path, file_format="tiff", **file_datasink_kwargs)
        self.data_column = data_column
        self.options_column = options_column
        self.default_options = default_options or {}

    def write_row_to_file(self, row: dict[str, Any], file: pyarrow.NativeFile) -> None:
        from pyvips import Image

        image = Image.new_from_array(row[self.data_column])
        options = self.default_options.copy()
        if self.options_column is not None:
            options.update(row.get(self.options_column, {}))

        buffer = image.tiffsave_buffer(**options)
        file.write(buffer)

data_column = data_column instance-attribute

default_options = default_options or {} instance-attribute

options_column = options_column instance-attribute

__init__(path, data_column, options_column=None, default_options=None, **file_datasink_kwargs)

Initialize a VipsTIFFDatasink.

Parameters:

Name Type Description Default
path str

Output path for the TIFF files

required
data_column str

Column name containing image data (numpy array)

required
options_column str | None

Optional column name containing TIFF save options as dict

None
default_options dict[str, Any] | None

Default options for TIFF saving

None
**file_datasink_kwargs Any

Additional arguments for the file datasink

{}
Source code in ratiopath/ray/datasource/vips_tiff_datasink.py
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def __init__(
    self,
    path: str,
    data_column: str,
    options_column: str | None = None,
    default_options: dict[str, Any] | None = None,
    **file_datasink_kwargs: Any,
) -> None:
    """Initialize a VipsTIFFDatasink.

    Args:
        path: Output path for the TIFF files
        data_column: Column name containing image data (numpy array)
        options_column: Optional column name containing TIFF save options as dict
        default_options: Default options for TIFF saving
        **file_datasink_kwargs: Additional arguments for the file datasink
    """
    super().__init__(path, file_format="tiff", **file_datasink_kwargs)
    self.data_column = data_column
    self.options_column = options_column
    self.default_options = default_options or {}

write_row_to_file(row, file)

Source code in ratiopath/ray/datasource/vips_tiff_datasink.py
37
38
39
40
41
42
43
44
45
46
def write_row_to_file(self, row: dict[str, Any], file: pyarrow.NativeFile) -> None:
    from pyvips import Image

    image = Image.new_from_array(row[self.data_column])
    options = self.default_options.copy()
    if self.options_column is not None:
        options.update(row.get(self.options_column, {}))

    buffer = image.tiffsave_buffer(**options)
    file.write(buffer)