46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
import base64
|
|
import io
|
|
|
|
from PIL import Image
|
|
|
|
from python.image_serialization import data_url_to_pil, file_to_data_url, pil_to_data_url
|
|
|
|
|
|
def _decode_data_url(data_url):
|
|
header, encoded = data_url.split(",", 1)
|
|
return header, base64.b64decode(encoded)
|
|
|
|
|
|
def test_pil_to_data_url_preserves_png_mode_dimensions_and_pixels():
|
|
image = Image.new("RGB", (2, 1), (255, 0, 128))
|
|
|
|
data_url = pil_to_data_url(image)
|
|
header, encoded = _decode_data_url(data_url)
|
|
decoded = Image.open(io.BytesIO(encoded))
|
|
|
|
assert header == "data:image/png;base64"
|
|
assert decoded.mode == "RGB"
|
|
assert decoded.size == (2, 1)
|
|
assert decoded.getpixel((0, 0)) == (255, 0, 128)
|
|
|
|
|
|
def test_file_to_data_url_preserves_file_bytes_and_mime_type(tmp_path):
|
|
path = tmp_path / "image.png"
|
|
path.write_bytes(b"not-transformed-image-bytes")
|
|
|
|
data_url = file_to_data_url(str(path), mime_type="image/png")
|
|
header, encoded = _decode_data_url(data_url)
|
|
|
|
assert header == "data:image/png;base64"
|
|
assert encoded == b"not-transformed-image-bytes"
|
|
|
|
|
|
def test_data_url_to_pil_preserves_image_mode_dimensions_and_pixels():
|
|
image = Image.new("RGBA", (2, 1), (255, 0, 128, 128))
|
|
|
|
decoded = data_url_to_pil(pil_to_data_url(image))
|
|
|
|
assert decoded.mode == "RGBA"
|
|
assert decoded.size == (2, 1)
|
|
assert decoded.getpixel((0, 0)) == (255, 0, 128, 128)
|