148 lines
4.4 KiB
Python
148 lines
4.4 KiB
Python
# vim: set fileencoding=utf-8 :
|
|
|
|
import sys
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import pytest
|
|
|
|
import pyvips
|
|
from helpers import \
|
|
JPEG_FILE, PNG_FILE, TIF_FILE, \
|
|
temp_filename, assert_almost_equal_objects, have, skip_if_no
|
|
|
|
|
|
class TestConnection:
|
|
tempdir = None
|
|
|
|
@classmethod
|
|
def setup_class(cls):
|
|
cls.tempdir = tempfile.mkdtemp()
|
|
cls.colour = pyvips.Image.jpegload(JPEG_FILE)
|
|
cls.mono = cls.colour.extract_band(1).copy()
|
|
# we remove the ICC profile: the RGB one will no longer be appropriate
|
|
cls.mono.remove("icc-profile-data")
|
|
cls.rad = cls.colour.float2rad().copy()
|
|
cls.rad.remove("icc-profile-data")
|
|
cls.cmyk = cls.colour.bandjoin(cls.mono)
|
|
cls.cmyk = cls.cmyk.copy(interpretation=pyvips.Interpretation.CMYK)
|
|
cls.cmyk.remove("icc-profile-data")
|
|
|
|
@classmethod
|
|
def teardown_class(cls):
|
|
shutil.rmtree(cls.tempdir, ignore_errors=True)
|
|
cls.colour = None
|
|
cls.mono = None
|
|
cls.rad = None
|
|
cls.cmyk = None
|
|
|
|
def test_source_new_from_file(self):
|
|
x = pyvips.Source.new_from_file(JPEG_FILE)
|
|
|
|
assert x.filename() == JPEG_FILE
|
|
|
|
@skip_if_no("jpegload_source")
|
|
def test_image_new_from_source_file(self):
|
|
x = pyvips.Source.new_from_file(JPEG_FILE)
|
|
y = pyvips.Image.new_from_source(x, "")
|
|
|
|
assert y.width == 290
|
|
assert y.height == 442
|
|
|
|
def test_target_new_to_file(self):
|
|
filename = temp_filename(self.tempdir, ".jpg")
|
|
x = pyvips.Target.new_to_file(filename)
|
|
|
|
assert x.filename() == filename
|
|
|
|
@skip_if_no("jpegload_source")
|
|
def test_image_write_to_target_file(self):
|
|
filename = temp_filename(self.tempdir, ".jpg")
|
|
x = pyvips.Target.new_to_file(filename)
|
|
self.colour.write_to_target(x, ".jpg")
|
|
with open(filename, 'rb') as f:
|
|
data = f.read()
|
|
data2 = self.colour.write_to_buffer(".jpg")
|
|
|
|
assert data == data2
|
|
|
|
def test_source_new_memory(self):
|
|
data = self.colour.write_to_buffer(".jpg")
|
|
x = pyvips.Source.new_from_memory(data)
|
|
|
|
assert x.filename() == None
|
|
|
|
@skip_if_no("jpegload_source")
|
|
def test_image_new_from_source_memory(self):
|
|
data = self.colour.write_to_buffer(".jpg")
|
|
x = pyvips.Source.new_from_memory(data)
|
|
y = pyvips.Image.new_from_source(x, "")
|
|
|
|
assert y.width == 290
|
|
assert y.height == 442
|
|
|
|
def test_target_new_memory(self):
|
|
x = pyvips.Target.new_to_memory()
|
|
|
|
assert x.filename() == None
|
|
|
|
@skip_if_no("jpegload_source")
|
|
def test_image_write_to_target_memory(self):
|
|
x = pyvips.Target.new_to_memory()
|
|
self.colour.write_to_target(x, ".jpg")
|
|
y = self.colour.write_to_buffer(".jpg")
|
|
|
|
assert x.get("blob") == y
|
|
|
|
@skip_if_no("matrixload_source")
|
|
@skip_if_no("matrixsave_target")
|
|
def test_connection_matrix(self):
|
|
x = pyvips.Target.new_to_memory()
|
|
self.mono.matrixsave_target(x)
|
|
y = pyvips.Source.new_from_memory(x.get("blob"))
|
|
im = pyvips.Image.matrixload_source(y)
|
|
|
|
assert (im - self.mono).abs().max() == 0
|
|
|
|
@skip_if_no("csvload_source")
|
|
@skip_if_no("csvsave_target")
|
|
def test_connection_csv(self):
|
|
x = pyvips.Target.new_to_memory()
|
|
self.mono.csvsave_target(x)
|
|
y = pyvips.Source.new_from_memory(x.get("blob"))
|
|
im = pyvips.Image.csvload_source(y)
|
|
|
|
assert (im - self.mono).abs().max() == 0
|
|
|
|
@skip_if_no("ppmload_source")
|
|
@skip_if_no("ppmsave_target")
|
|
def test_connection_ppm(self):
|
|
x = pyvips.Target.new_to_memory()
|
|
self.mono.ppmsave_target(x)
|
|
y = pyvips.Source.new_from_memory(x.get("blob"))
|
|
im = pyvips.Image.ppmload_source(y)
|
|
|
|
assert (im - self.mono).abs().max() == 0
|
|
|
|
@skip_if_no("tiffload_source")
|
|
@skip_if_no("tiffsave_target")
|
|
def test_connection_tiff(self):
|
|
x = pyvips.Target.new_to_memory()
|
|
self.mono.tiffsave_target(x)
|
|
y = pyvips.Source.new_from_memory(x.get("blob"))
|
|
im = pyvips.Image.tiffload_source(y)
|
|
|
|
assert (im - self.mono).abs().max() == 0
|
|
|
|
@skip_if_no("dzsave_target")
|
|
def test_connection_dz(self):
|
|
x = pyvips.Target.new_to_memory()
|
|
self.mono.dzsave_target(x)
|
|
data = x.get("blob")
|
|
|
|
# it'll be a zip, we could extract stuff and look for tiles
|
|
assert len(data) > 1000
|
|
|
|
if __name__ == '__main__':
|
|
pytest.main()
|