mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-07-06 21:03:18 +03:00
commit
529e113505
|
@ -1,11 +1,16 @@
|
||||||
import pickle
|
import pickle
|
||||||
|
|
||||||
|
import pytest
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
|
from .helper import skip_unless_feature
|
||||||
|
|
||||||
def helper_pickle_file(tmp_path, pickle, protocol=0, mode=None):
|
|
||||||
|
def helper_pickle_file(
|
||||||
|
tmp_path, pickle, protocol=0, test_file="Tests/images/hopper.jpg", mode=None
|
||||||
|
):
|
||||||
# Arrange
|
# Arrange
|
||||||
with Image.open("Tests/images/hopper.jpg") as im:
|
with Image.open(test_file) as im:
|
||||||
filename = str(tmp_path / "temp.pkl")
|
filename = str(tmp_path / "temp.pkl")
|
||||||
if mode:
|
if mode:
|
||||||
im = im.convert(mode)
|
im = im.convert(mode)
|
||||||
|
@ -35,41 +40,30 @@ def helper_pickle_string(
|
||||||
assert im == loaded_im
|
assert im == loaded_im
|
||||||
|
|
||||||
|
|
||||||
def test_pickle_image(tmp_path):
|
@pytest.mark.parametrize(
|
||||||
|
("test_file", "test_mode"),
|
||||||
|
[
|
||||||
|
("Tests/images/hopper.jpg", None),
|
||||||
|
("Tests/images/hopper.jpg", "L"),
|
||||||
|
("Tests/images/hopper.jpg", "PA"),
|
||||||
|
pytest.param(
|
||||||
|
"Tests/images/hopper.webp", None, marks=skip_unless_feature("webp")
|
||||||
|
),
|
||||||
|
("Tests/images/test-card.png", None),
|
||||||
|
("Tests/images/zero_bb.png", None),
|
||||||
|
("Tests/images/zero_bb_scale2.png", None),
|
||||||
|
("Tests/images/non_zero_bb.png", None),
|
||||||
|
("Tests/images/non_zero_bb_scale2.png", None),
|
||||||
|
("Tests/images/p_trns_single.png", None),
|
||||||
|
("Tests/images/pil123p.png", None),
|
||||||
|
("Tests/images/itxt_chunks.png", None),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_pickle_image(tmp_path, test_file, test_mode):
|
||||||
# Act / Assert
|
# Act / Assert
|
||||||
for protocol in range(0, pickle.HIGHEST_PROTOCOL + 1):
|
for protocol in range(0, pickle.HIGHEST_PROTOCOL + 1):
|
||||||
helper_pickle_string(pickle, protocol)
|
helper_pickle_string(pickle, protocol, test_file, test_mode)
|
||||||
helper_pickle_file(tmp_path, pickle, protocol)
|
helper_pickle_file(tmp_path, pickle, protocol, test_file, test_mode)
|
||||||
|
|
||||||
|
|
||||||
def test_pickle_p_mode():
|
|
||||||
# Act / Assert
|
|
||||||
for test_file in [
|
|
||||||
"Tests/images/test-card.png",
|
|
||||||
"Tests/images/zero_bb.png",
|
|
||||||
"Tests/images/zero_bb_scale2.png",
|
|
||||||
"Tests/images/non_zero_bb.png",
|
|
||||||
"Tests/images/non_zero_bb_scale2.png",
|
|
||||||
"Tests/images/p_trns_single.png",
|
|
||||||
"Tests/images/pil123p.png",
|
|
||||||
"Tests/images/itxt_chunks.png",
|
|
||||||
]:
|
|
||||||
for protocol in range(0, pickle.HIGHEST_PROTOCOL + 1):
|
|
||||||
helper_pickle_string(pickle, protocol=protocol, test_file=test_file)
|
|
||||||
|
|
||||||
|
|
||||||
def test_pickle_pa_mode(tmp_path):
|
|
||||||
# Act / Assert
|
|
||||||
for protocol in range(0, pickle.HIGHEST_PROTOCOL + 1):
|
|
||||||
helper_pickle_string(pickle, protocol, mode="PA")
|
|
||||||
helper_pickle_file(tmp_path, pickle, protocol, mode="PA")
|
|
||||||
|
|
||||||
|
|
||||||
def test_pickle_l_mode(tmp_path):
|
|
||||||
# Act / Assert
|
|
||||||
for protocol in range(0, pickle.HIGHEST_PROTOCOL + 1):
|
|
||||||
helper_pickle_string(pickle, protocol, mode="L")
|
|
||||||
helper_pickle_file(tmp_path, pickle, protocol, mode="L")
|
|
||||||
|
|
||||||
|
|
||||||
def test_pickle_la_mode_with_palette(tmp_path):
|
def test_pickle_la_mode_with_palette(tmp_path):
|
||||||
|
@ -88,3 +82,15 @@ def test_pickle_la_mode_with_palette(tmp_path):
|
||||||
|
|
||||||
im.mode = "PA"
|
im.mode = "PA"
|
||||||
assert im == loaded_im
|
assert im == loaded_im
|
||||||
|
|
||||||
|
|
||||||
|
@skip_unless_feature("webp")
|
||||||
|
def test_pickle_tell():
|
||||||
|
# Arrange
|
||||||
|
image = Image.open("Tests/images/hopper.webp")
|
||||||
|
|
||||||
|
# Act: roundtrip
|
||||||
|
unpickled_image = pickle.loads(pickle.dumps(image))
|
||||||
|
|
||||||
|
# Assert
|
||||||
|
assert unpickled_image.tell() == 0
|
||||||
|
|
|
@ -38,6 +38,8 @@ class WebPImageFile(ImageFile.ImageFile):
|
||||||
|
|
||||||
format = "WEBP"
|
format = "WEBP"
|
||||||
format_description = "WebP image"
|
format_description = "WebP image"
|
||||||
|
__loaded = 0
|
||||||
|
__logical_frame = 0
|
||||||
|
|
||||||
def _open(self):
|
def _open(self):
|
||||||
if not _webp.HAVE_WEBPANIM:
|
if not _webp.HAVE_WEBPANIM:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user