diff --git a/autotest/gdrivers/jpegxl.py b/autotest/gdrivers/jpegxl.py index 4c324eada3c5..ab3762eb2121 100755 --- a/autotest/gdrivers/jpegxl.py +++ b/autotest/gdrivers/jpegxl.py @@ -70,15 +70,14 @@ def test_jpegxl_rgba(): @pytest.mark.parametrize("lossless", ["YES", "NO", None]) -def test_jpegxl_rgba_lossless_param(lossless): - +def test_jpegxl_rgba_lossless_param(tmp_vsimem, lossless): src_ds = gdal.Open("../gcore/data/stefan_full_rgba.tif") - outfilename = "/vsimem/out.jxl" + filename = tmp_vsimem / "jpegxl_rgba_lossless_param.jxl" options = [] if lossless: options += ["LOSSLESS=" + lossless] - gdal.GetDriverByName("JPEGXL").CreateCopy(outfilename, src_ds, options=options) - ds = gdal.Open(outfilename) + gdal.GetDriverByName("JPEGXL").CreateCopy(filename, src_ds, options=options) + ds = gdal.Open(filename) assert ( ds.GetMetadataItem("COMPRESSION_REVERSIBILITY", "IMAGE_STRUCTURE") == "LOSSY" if lossless == "NO" @@ -91,104 +90,81 @@ def test_jpegxl_rgba_lossless_param(lossless): else: assert cs == src_ds.GetRasterBand(1).Checksum() - ds = None - gdal.GetDriverByName("JPEGXL").Delete(outfilename) - def test_jpegxl_rgba_lossless_no_but_lossless_copy_yes(): - src_ds = gdal.Open("../gcore/data/stefan_full_rgba.tif") - outfilename = "/vsimem/out.jxl" + filename = "/vsimem/jpegxl_rgba_lossless_no_but_lossless_copy_yes.jxl" with gdal.quiet_errors(): assert ( gdal.GetDriverByName("JPEGXL").CreateCopy( - outfilename, src_ds, options=["LOSSLESS=NO", "LOSSLESS_COPY=YES"] + filename, src_ds, options=["LOSSLESS=NO", "LOSSLESS_COPY=YES"] ) is None ) - assert gdal.VSIStatL(outfilename) is None + assert gdal.VSIStatL(filename) is None -def test_jpegxl_rgba_distance(): - +def test_jpegxl_rgba_distance(tmp_vsimem): src_ds = gdal.Open("../gcore/data/stefan_full_rgba.tif") - outfilename = "/vsimem/out.jxl" - gdal.GetDriverByName("JPEGXL").CreateCopy( - outfilename, src_ds, options=["DISTANCE=2"] - ) - ds = gdal.Open(outfilename) + filename = tmp_vsimem / "jpegxl_rgba_distance.jxl" + gdal.GetDriverByName("JPEGXL").CreateCopy(filename, src_ds, options=["DISTANCE=2"]) + ds = gdal.Open(filename) assert ds.GetMetadataItem("COMPRESSION_REVERSIBILITY", "IMAGE_STRUCTURE") == "LOSSY" cs = ds.GetRasterBand(1).Checksum() assert cs != 0 and cs != src_ds.GetRasterBand(1).Checksum() - ds = None - gdal.GetDriverByName("JPEGXL").Delete(outfilename) - @pytest.mark.parametrize( "quality,equivalent_distance", [(100, 0), (10, 15.266666666666667)] ) -def test_jpegxl_rgba_quality(quality, equivalent_distance): - +def test_jpegxl_rgba_quality(tmp_vsimem, quality, equivalent_distance): src_ds = gdal.Open("../gcore/data/stefan_full_rgba.tif") - outfilename = "/vsimem/out.jxl" + filename = tmp_vsimem / "jpegxl_rgba_quality.jxl" gdal.GetDriverByName("JPEGXL").CreateCopy( - outfilename, src_ds, options=["QUALITY=" + str(quality)] + filename, src_ds, options=["QUALITY=" + str(quality)] ) - ds = gdal.Open(outfilename) + ds = gdal.Open(filename) assert ds.GetMetadataItem("COMPRESSION_REVERSIBILITY", "IMAGE_STRUCTURE") == "LOSSY" cs = ds.GetRasterBand(1).Checksum() assert cs != 0 and cs != src_ds.GetRasterBand(1).Checksum() with gdal.quiet_errors(): gdal.GetDriverByName("JPEGXL").CreateCopy( - outfilename, src_ds, options=["DISTANCE=" + str(equivalent_distance)] + filename, src_ds, options=["DISTANCE=" + str(equivalent_distance)] ) - ds = gdal.Open(outfilename) + ds = gdal.Open(filename) assert ds.GetRasterBand(1).Checksum() == cs - ds = None - gdal.GetDriverByName("JPEGXL").Delete(outfilename) - @pytest.mark.require_creation_option("JPEGXL", "COMPRESS_BOX") -def test_jpegxl_xmp(): - +def test_jpegxl_xmp(tmp_vsimem): src_ds = gdal.Open("data/gtiff/byte_with_xmp.tif") - outfilename = "/vsimem/out.jxl" - gdal.GetDriverByName("JPEGXL").CreateCopy(outfilename, src_ds) - assert gdal.VSIStatL(outfilename + ".aux.xml") is None - ds = gdal.Open(outfilename) + filename = tmp_vsimem / "jpegxl_xmp.jxl" + gdal.GetDriverByName("JPEGXL").CreateCopy(filename, src_ds) + assert gdal.VSIStatL(str(filename) + ".aux.xml") is None + ds = gdal.Open(filename) assert set(ds.GetMetadataDomainList()) == set( ["DERIVED_SUBDATASETS", "xml:XMP", "IMAGE_STRUCTURE"] ) assert ds.GetMetadata("xml:XMP")[0].startswith(" 0.8.1 required" -def test_jpegxl_alpha_distance_zero(): - +def test_jpegxl_alpha_distance_zero(tmp_vsimem): drv = gdal.GetDriverByName("JPEGXL") src_ds = gdal.Open("../gcore/data/stefan_full_rgba.tif") - filename = "/vsimem/test_jpegxl_alpha_distance_zero.jxl" + filename = tmp_vsimem / "test_jpegxl_alpha_distance_zero.jxl" drv.CreateCopy( filename, src_ds, @@ -821,18 +744,14 @@ def test_jpegxl_alpha_distance_zero(): ds = gdal.Open(filename) assert ds.GetRasterBand(1).Checksum() != src_ds.GetRasterBand(1).Checksum() assert ds.GetRasterBand(4).Checksum() == src_ds.GetRasterBand(4).Checksum() - ds = None - - gdal.Unlink(filename) ############################################################################### -# Test identifying a JPEGXL raw codestream (not withing a JPEGXL container) +# Test identifying a JPEGXL raw codestream (not within a JPEGXL container) # that has not a .jxl extension # Serves as a way of checking that the simplified identification method in GDAL # core, when the driver built as a plugin, is followed by a call to the real # driver to further refine the identification. - pytest.mark.skipif( test_cli_utilities.get_cli_utility_path("gdalmanage") is None, reason="gdalmanage not available", @@ -840,7 +759,6 @@ def test_jpegxl_alpha_distance_zero(): def test_jpegxl_identify_raw_codestream(): - gdalmanage_path = test_cli_utilities.get_cli_utility_path("gdalmanage") out, err = gdaltest.runexternal_out_and_err( f"{gdalmanage_path} identify data/jpegxl/test.jxl.bin" @@ -850,7 +768,6 @@ def test_jpegxl_identify_raw_codestream(): ############################################################################### def test_jpegxl_read_float16(): - # Image produced with: # gdal_translate autotest/gcore/data/rgbsmall.tif float.exr -co PIXEL_TYPE=FLOAT -co TILED=NO -co COMPRESS=PIZ # cjxl -d 0 float.exr float16.jxl