--- /dev/null
+from collections.abc import MutableMapping
+from numbers import Rational
+from typing import Any
+
+from .ImageFile import ImageFile
+
+logger: Any
+READ_LIBTIFF: bool
+WRITE_LIBTIFF: bool
+IFD_LEGACY_API: bool
+II: bytes
+MM: bytes
+IMAGEWIDTH: int
+IMAGELENGTH: int
+BITSPERSAMPLE: int
+COMPRESSION: int
+PHOTOMETRIC_INTERPRETATION: int
+FILLORDER: int
+IMAGEDESCRIPTION: int
+STRIPOFFSETS: int
+SAMPLESPERPIXEL: int
+ROWSPERSTRIP: int
+STRIPBYTECOUNTS: int
+X_RESOLUTION: int
+Y_RESOLUTION: int
+PLANAR_CONFIGURATION: int
+RESOLUTION_UNIT: int
+TRANSFERFUNCTION: int
+SOFTWARE: int
+DATE_TIME: int
+ARTIST: int
+PREDICTOR: int
+COLORMAP: int
+TILEOFFSETS: int
+SUBIFD: int
+EXTRASAMPLES: int
+SAMPLEFORMAT: int
+JPEGTABLES: int
+REFERENCEBLACKWHITE: int
+COPYRIGHT: int
+IPTC_NAA_CHUNK: int
+PHOTOSHOP_CHUNK: int
+ICCPROFILE: int
+EXIFIFD: int
+XMP: int
+JPEGQUALITY: int
+IMAGEJ_META_DATA_BYTE_COUNTS: int
+IMAGEJ_META_DATA: int
+COMPRESSION_INFO: Any
+COMPRESSION_INFO_REV: Any
+OPEN_INFO: Any
+PREFIXES: Any
+
+class IFDRational(Rational):
+ def __init__(self, value, denominator: int = ...) -> None: ...
+ @property
+ def numerator(a): ...
+ @property
+ def denominator(a): ...
+ def limit_rational(self, max_denominator): ...
+ def __hash__(self): ...
+ def __eq__(self, other): ...
+ __add__: Any
+ __radd__: Any
+ __sub__: Any
+ __rsub__: Any
+ __mul__: Any
+ __rmul__: Any
+ __truediv__: Any
+ __rtruediv__: Any
+ __floordiv__: Any
+ __rfloordiv__: Any
+ __mod__: Any
+ __rmod__: Any
+ __pow__: Any
+ __rpow__: Any
+ __pos__: Any
+ __neg__: Any
+ __abs__: Any
+ __trunc__: Any
+ __lt__: Any
+ __gt__: Any
+ __le__: Any
+ __ge__: Any
+ __bool__: Any
+ __ceil__: Any
+ __floor__: Any
+ __round__: Any
+
+class ImageFileDirectory_v2(MutableMapping[int, Any]):
+ group: int | None
+ tagtype: dict[int, int]
+ def __init__(self, ifh: bytes = ..., prefix: bytes | None = ..., group: int | None = ...) -> None: ...
+ @property
+ def prefix(self) -> bytes: ...
+ @property
+ def offset(self) -> int | None: ...
+ @property
+ def legacy_api(self) -> bool: ...
+ def reset(self) -> None: ...
+ def named(self): ...
+ def __len__(self) -> int: ...
+ def __getitem__(self, tag): ...
+ def __contains__(self, tag): ...
+ def __setitem__(self, tag, value) -> None: ...
+ def __delitem__(self, tag) -> None: ...
+ def __iter__(self): ...
+ def load_byte(self, data, legacy_api: bool = ...): ...
+ def write_byte(self, data): ...
+ def load_string(self, data, legacy_api: bool = ...): ...
+ def write_string(self, value): ...
+ def load_rational(self, data, legacy_api: bool = ...): ...
+ def write_rational(self, *values): ...
+ def load_undefined(self, data, legacy_api: bool = ...): ...
+ def write_undefined(self, value): ...
+ def load_signed_rational(self, data, legacy_api: bool = ...): ...
+ def write_signed_rational(self, *values): ...
+ def load(self, fp) -> None: ...
+ def tobytes(self, offset: int = ...): ...
+ def save(self, fp): ...
+
+class ImageFileDirectory_v1(ImageFileDirectory_v2):
+ def __init__(self, *args, **kwargs) -> None: ...
+ tags: Any
+ tagdata: Any
+ tagtype: dict[int, int]
+ @classmethod
+ def from_v2(cls, original): ...
+ def to_v2(self): ...
+ def __contains__(self, tag): ...
+ def __len__(self): ...
+ def __iter__(self): ...
+ def __setitem__(self, tag, value) -> None: ...
+ def __getitem__(self, tag): ...
+
+ImageFileDirectory = ImageFileDirectory_v1
+
+class TiffImageFile(ImageFile):
+ format: str
+ format_description: str
+ tag_v2: Any
+ tag: Any
+ def __init__(self, fp: Any | None = ..., filename: Any | None = ...) -> None: ...
+ @property
+ def n_frames(self): ...
+ im: Any
+ def seek(self, frame) -> None: ...
+ def tell(self): ...
+ def load(self): ...
+ def load_end(self) -> None: ...
+
+SAVE_INFO: Any
+
+class AppendingTiffWriter:
+ fieldSizes: Any
+ Tags: Any
+ f: Any
+ close_fp: bool
+ name: Any
+ beginning: Any
+ def __init__(self, fn, new: bool = ...) -> None: ...
+ whereToWriteNewIFDOffset: Any
+ offsetOfNewPage: int
+ IIMM: Any
+ isFirst: bool
+ def setup(self) -> None: ...
+ def finalize(self) -> None: ...
+ def newFrame(self) -> None: ...
+ def __enter__(self): ...
+ def __exit__(self, exc_type, exc_value, traceback): ...
+ def tell(self): ...
+ def seek(self, offset, whence=...): ...
+ def goToEnd(self) -> None: ...
+ endian: Any
+ longFmt: Any
+ shortFmt: Any
+ tagFormat: Any
+ def setEndian(self, endian) -> None: ...
+ def skipIFDs(self) -> None: ...
+ def write(self, data): ...
+ def readShort(self): ...
+ def readLong(self): ...
+ def rewriteLastShortToLong(self, value) -> None: ...
+ def rewriteLastShort(self, value) -> None: ...
+ def rewriteLastLong(self, value) -> None: ...
+ def writeShort(self, value) -> None: ...
+ def writeLong(self, value) -> None: ...
+ def close(self) -> None: ...
+ def fixIFD(self) -> None: ...
+ def fixOffsets(self, count, isShort: bool = ..., isLong: bool = ...) -> None: ...