mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-10 19:56:47 +03:00
Merge pull request #7912 from hugovk/hopper-lru-cache
This commit is contained in:
commit
22376775b0
|
@ -11,6 +11,7 @@ import subprocess
|
||||||
import sys
|
import sys
|
||||||
import sysconfig
|
import sysconfig
|
||||||
import tempfile
|
import tempfile
|
||||||
|
from functools import lru_cache
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from typing import Any, Callable, Sequence
|
from typing import Any, Callable, Sequence
|
||||||
|
|
||||||
|
@ -250,23 +251,27 @@ def tostring(im: Image.Image, string_format: str, **options: Any) -> bytes:
|
||||||
return out.getvalue()
|
return out.getvalue()
|
||||||
|
|
||||||
|
|
||||||
def hopper(mode: str | None = None, cache: dict[str, Image.Image] = {}) -> Image.Image:
|
def hopper(mode: str | None = None) -> Image.Image:
|
||||||
|
# Use caching to reduce reading from disk, but return a copy
|
||||||
|
# so that the cached image isn't modified by the tests
|
||||||
|
# (for fast, isolated, repeatable tests).
|
||||||
|
|
||||||
if mode is None:
|
if mode is None:
|
||||||
# Always return fresh not-yet-loaded version of image.
|
# Always return fresh not-yet-loaded version of image.
|
||||||
# Operations on not-yet-loaded images is separate class of errors
|
# Operations on not-yet-loaded images are a separate class of errors
|
||||||
# what we should catch.
|
# that we should catch.
|
||||||
return Image.open("Tests/images/hopper.ppm")
|
return Image.open("Tests/images/hopper.ppm")
|
||||||
# Use caching to reduce reading from disk but so an original copy is
|
|
||||||
# returned each time and the cached image isn't modified by tests
|
return _cached_hopper(mode).copy()
|
||||||
# (for fast, isolated, repeatable tests).
|
|
||||||
im = cache.get(mode)
|
|
||||||
if im is None:
|
@lru_cache
|
||||||
if mode == "F":
|
def _cached_hopper(mode: str) -> Image.Image:
|
||||||
im = hopper("L").convert(mode)
|
if mode == "F":
|
||||||
else:
|
im = hopper("L")
|
||||||
im = hopper().convert(mode)
|
else:
|
||||||
cache[mode] = im
|
im = hopper()
|
||||||
return im.copy()
|
return im.convert(mode)
|
||||||
|
|
||||||
|
|
||||||
def djpeg_available() -> bool:
|
def djpeg_available() -> bool:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user