Test using _seek to skip frames by radarhere · Pull Request #8804 · python-pillow/Pillow
Three formats - APNG, FLI and GIF raise an error if _seek is called to seek to frame that isn't the next one or the first one.
| def seek(self, frame: int) -> None: | |
| if not self._seek_check(frame): | |
| return | |
| if frame < self.__frame: | |
| self._seek(0) | |
| for f in range(self.__frame + 1, frame + 1): | |
| self._seek(f) | |
| def _seek(self, frame: int) -> None: | |
| if frame == 0: | |
| self.__frame = -1 | |
| self._fp.seek(self.__rewind) | |
| self.__offset = 128 | |
| else: | |
| # ensure that the previous frame was loaded | |
| self.load() | |
| if frame != self.__frame + 1: | |
| msg = f"cannot seek to frame {frame}" | |
| raise ValueError(msg) |
_seek shouldn't be called by end users, but ensuring it is called in the correct way internally would guard against bugs.