(
im: Image.Image,
fp: IO[bytes],
tile: list[_Tile],
bufsize: int,
fh: int | None,
exc: BaseException | None = None,
)
| 670 | |
| 671 | |
| 672 | def _encode_tile( |
| 673 | im: Image.Image, |
| 674 | fp: IO[bytes], |
| 675 | tile: list[_Tile], |
| 676 | bufsize: int, |
| 677 | fh: int | None, |
| 678 | exc: BaseException | None = None, |
| 679 | ) -> None: |
| 680 | for encoder_name, extents, offset, args in tile: |
| 681 | if offset > 0: |
| 682 | fp.seek(offset) |
| 683 | encoder = Image._getencoder(im.mode, encoder_name, args, im.encoderconfig) |
| 684 | try: |
| 685 | encoder.setimage(im.im, extents) |
| 686 | if encoder.pushes_fd: |
| 687 | encoder.setfd(fp) |
| 688 | errcode = encoder.encode_to_pyfd()[1] |
| 689 | else: |
| 690 | if exc: |
| 691 | # compress to Python file-compatible object |
| 692 | while True: |
| 693 | errcode, data = encoder.encode(bufsize)[1:] |
| 694 | fp.write(data) |
| 695 | if errcode: |
| 696 | break |
| 697 | else: |
| 698 | # slight speedup: compress to real file object |
| 699 | assert fh is not None |
| 700 | errcode = encoder.encode_to_file(fh, bufsize) |
| 701 | if errcode < 0: |
| 702 | raise _get_oserror(errcode, encoder=True) from exc |
| 703 | finally: |
| 704 | encoder.cleanup() |
| 705 | |
| 706 | |
| 707 | def _safe_read(fp: IO[bytes], size: int) -> bytes: |
no test coverage detected
searching dependent graphs…