def test_exif_ifd(self): with Image.open("Tests/images/flower.jpg") as im: exif = im.getexif() del exif.get_ifd(0x8769)[0xA005] reloaded_exif = Image.Exif() reloaded_exif.load(exif.tobytes()) assert reloaded_exif.get_ifd(0x8769) == exif.get_ifd(0x8769)
def test_exif_bytes_argument(self, tmp_path): exif = Image.Exif() exif[274] = 1 exif_data = exif.tobytes() with Image.open(TEST_AVIF_FILE) as im: test_file = str(tmp_path / "temp.avif") im.save(test_file, exif=exif_data) with Image.open(test_file) as reloaded: assert reloaded.info["exif"] == exif_data
def clean(img): """ Remove all exif tags except the orientation """ TAG_ORIENTATION = 0x112 exif = img.getexif() if len(exif) > 0: clean_exif = Image.Exif() if TAG_ORIENTATION in exif: clean_exif[TAG_ORIENTATION] = exif[TAG_ORIENTATION] img.info["exif"] = clean_exif.tobytes()
def test_exif_interop(self): with Image.open("Tests/images/flower.jpg") as im: exif = im.getexif() assert exif.get_ifd(0xA005) == { 1: "R98", 2: b"0100", 4097: 2272, 4098: 1704, } reloaded_exif = Image.Exif() reloaded_exif.load(exif.tobytes()) assert reloaded_exif.get_ifd(0xA005) == exif.get_ifd(0xA005)
def test_exif_load_from_fp(self): with Image.open("Tests/images/flower.jpg") as im: data = im.info["exif"] if data.startswith(b"Exif\x00\x00"): data = data[6:] fp = io.BytesIO(data) exif = Image.Exif() exif.load_from_fp(fp) assert exif == { 271: "Canon", 272: "Canon PowerShot S40", 274: 1, 282: 180.0, 283: 180.0, 296: 2, 306: "2003:12:14 12:01:44", 531: 1, 34665: 196, }
def test_exif_gps(self, tmp_path): expected_exif_gps = { 0: b"\x00\x00\x00\x01", 2: 4294967295, 5: b"\x01", 30: 65535, 29: "1999:99:99 99:99:99", } gps_index = 34853 # Reading with Image.open("Tests/images/exif_gps.jpg") as im: exif = im._getexif() assert exif[gps_index] == expected_exif_gps # Writing f = str(tmp_path / "temp.jpg") exif = Image.Exif() exif[gps_index] = expected_exif_gps hopper().save(f, exif=exif) with Image.open(f) as reloaded: exif = reloaded._getexif() assert exif[gps_index] == expected_exif_gps