ImageConverter now uses generic context; #562

This commit is contained in:
Rhet Turnbull
2021-12-31 17:34:41 -08:00
parent cbe79ee98c
commit a3b2784f31
4 changed files with 20 additions and 47 deletions

View File

@@ -1,3 +1,3 @@
""" version info """ """ version info """
__version__ = "0.44.2" __version__ = "0.44.3"

View File

@@ -47,10 +47,7 @@ class ImageConverter:
"workingFormat": Quartz.kCIFormatRGBAh, "workingFormat": Quartz.kCIFormatRGBAh,
} }
) )
mtldevice = Metal.MTLCreateSystemDefaultDevice() self.context = Quartz.CIContext.contextWithOptions_(context_options)
self.context = Quartz.CIContext.contextWithMTLDevice_options_(
mtldevice, context_options
)
def write_jpeg(self, input_path, output_path, compression_quality=1.0): def write_jpeg(self, input_path, output_path, compression_quality=1.0):
"""convert image to jpeg and write image to output_path """convert image to jpeg and write image to output_path
@@ -104,9 +101,12 @@ class ImageConverter:
if input_image is None: if input_image is None:
raise ImageConversionError(f"Could not create CIImage for {input_path}") raise ImageConversionError(f"Could not create CIImage for {input_path}")
output_colorspace = input_image.colorSpace() or Quartz.CGColorSpaceCreateWithName( output_colorspace = (
input_image.colorSpace()
or Quartz.CGColorSpaceCreateWithName(
Quartz.CoreGraphics.kCGColorSpaceSRGB Quartz.CoreGraphics.kCGColorSpaceSRGB
) )
)
output_options = NSDictionary.dictionaryWithDictionary_( output_options = NSDictionary.dictionaryWithDictionary_(
{"kCGImageDestinationLossyCompressionQuality": compression_quality} {"kCGImageDestinationLossyCompressionQuality": compression_quality}
@@ -123,4 +123,3 @@ class ImageConverter:
raise ImageConversionError( raise ImageConversionError(
f"Error converting file {input_path} to jpeg at {output_path}: {error}" f"Error converting file {input_path} to jpeg at {output_path}: {error}"
) )

View File

@@ -2393,10 +2393,6 @@ def test_export_original_suffix_template():
assert sorted(files) == sorted(CLI_EXPORT_FILENAMES_ORIGINAL_SUFFIX_TEMPLATE) assert sorted(files) == sorted(CLI_EXPORT_FILENAMES_ORIGINAL_SUFFIX_TEMPLATE)
@pytest.mark.skipif(
"OSXPHOTOS_TEST_CONVERT" not in os.environ,
reason="Skip if running in Github actions, no GPU.",
)
def test_export_convert_to_jpeg(): def test_export_convert_to_jpeg():
"""test --convert-to-jpeg""" """test --convert-to-jpeg"""
import glob import glob
@@ -2420,10 +2416,6 @@ def test_export_convert_to_jpeg():
assert large_file.stat().st_size > 7000000 assert large_file.stat().st_size > 7000000
@pytest.mark.skipif(
"OSXPHOTOS_TEST_CONVERT" not in os.environ,
reason="Skip if running in Github actions, no GPU.",
)
def test_export_convert_to_jpeg_quality(): def test_export_convert_to_jpeg_quality():
"""test --convert-to-jpeg --jpeg-quality""" """test --convert-to-jpeg --jpeg-quality"""
import glob import glob
@@ -2455,10 +2447,6 @@ def test_export_convert_to_jpeg_quality():
assert large_file.stat().st_size < 1000000 assert large_file.stat().st_size < 1000000
@pytest.mark.skipif(
"OSXPHOTOS_TEST_CONVERT" not in os.environ,
reason="Skip if running in Github actions, no GPU.",
)
def test_export_convert_to_jpeg_skip_raw(): def test_export_convert_to_jpeg_skip_raw():
"""test --convert-to-jpeg""" """test --convert-to-jpeg"""
import glob import glob
@@ -6678,10 +6666,6 @@ def test_export_jpeg_ext_edited_movie():
assert f"{filename}_edited.{ext}".lower() in files assert f"{filename}_edited.{ext}".lower() in files
@pytest.mark.skipif(
"OSXPHOTOS_TEST_CONVERT" not in os.environ,
reason="Skip if running in Github actions, no GPU.",
)
def test_export_jpeg_ext_convert_to_jpeg(): def test_export_jpeg_ext_convert_to_jpeg():
"""test --jpeg-ext with --convert-to-jpeg""" """test --jpeg-ext with --convert-to-jpeg"""
import glob import glob
@@ -6713,10 +6697,6 @@ def test_export_jpeg_ext_convert_to_jpeg():
assert f"{filename}.jpg" in files assert f"{filename}.jpg" in files
@pytest.mark.skipif(
"OSXPHOTOS_TEST_CONVERT" not in os.environ,
reason="Skip if running in Github actions, no GPU.",
)
def test_export_jpeg_ext_convert_to_jpeg_movie(): def test_export_jpeg_ext_convert_to_jpeg_movie():
"""test --jpeg-ext with --convert-to-jpeg and a movie, shouldn't convert or change extensions, #366""" """test --jpeg-ext with --convert-to-jpeg and a movie, shouldn't convert or change extensions, #366"""
import glob import glob

View File

@@ -4,11 +4,6 @@ import os
import pytest import pytest
skip_test = "OSXPHOTOS_TEST_CONVERT" not in os.environ
pytestmark = pytest.mark.skipif(
skip_test, reason="Skip if running on GitHub actions, no GPU."
)
TEST_HEIC = "tests/test-images/IMG_3092.heic" TEST_HEIC = "tests/test-images/IMG_3092.heic"
TEST_RAW = "tests/test-images/IMG_0476_2.CR2" TEST_RAW = "tests/test-images/IMG_0476_2.CR2"
@@ -113,4 +108,3 @@ def test_image_converter_missing_file():
outfile = pathlib.Path(tempdir.name) / f"{imgfile.stem}.jpeg" outfile = pathlib.Path(tempdir.name) / f"{imgfile.stem}.jpeg"
with pytest.raises(FileNotFoundError): with pytest.raises(FileNotFoundError):
converter.write_jpeg(imgfile, outfile) converter.write_jpeg(imgfile, outfile)