# 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()