From 094d6c06f88cd40440114e22c9f8e211f83888b6 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 26 Jul 2022 11:51:11 +1000 Subject: [PATCH] Simplified code --- Tests/images/xmp_tags_orientation_exiftool.png | Bin 1935 -> 169 bytes Tests/test_imageops.py | 16 +++++----------- src/PIL/Image.py | 10 ++-------- src/PIL/ImageOps.py | 13 +++++-------- 4 files changed, 12 insertions(+), 27 deletions(-) diff --git a/Tests/images/xmp_tags_orientation_exiftool.png b/Tests/images/xmp_tags_orientation_exiftool.png index fb30199c86acbc8953d1cf16ddfa9e3ec41ece19..e366f0b9cc8474b1149477e0d387fdab26955d37 100644 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j3CSbBp9sfW`_c)sMHA0G+$o^Eg+kNft68+ff>kR z1d)tV46I-_1A`Z%G@Kp8r~y^O#K6EL3}u51h5!#B1>%9}f&ibTKsJ}Bi(^Q|oa6)` Xn~8zZWBrmsAdA7%)z4*}Q$iB}PA3wu literal 1935 zcmY+F2{hZ;9>@QxtxWn1Gu2jWOXx_a$WnUdQ2t5V` z06@{v!PW(w`C!LG_JE_;L6P4`et*gwlVAAXEGzg8a;B2x}{-B@YV%Lg*YS zj29Bj48!tph+QrgT<^G12-t22CkTgd450?lu~<7E!=J)p1;a3>kcMak2nnV6V_j_R zzaT&hhX~|w*jN;b%jF`uhDcUu019JnZjM5qLY+Eg07e*ug)=!+o&hsV2P8mYy9`@; zm|rM^&0(;ZupK7VmvxncLm;5AFK7?GmO$a< z&F8iKbD6B(wdmL!K_T9S2q}c`15?RJXrp<;mb@oa+pNAZ5oVT{7IZ}6esn!{T`N9% ze`nFJoi55XkKts6B| z2Pdr~l<<_(Gx(5BY`|M;*F#uEFcj%G(&WlJ9@6LRsrRNDa{5Z^^#nw;4nBTC4q7F0am|R}D?90? z#r)z{Ho&Yi=oKapG8f_Z2$U0$pZVzW(er*>6`FTZ>B$)M?OuBIa7|5(Q<3o9#>bBz zU%ysS+!Jvq$TcAU)9!(IKDtq%_s*fzEyU{h++1*Ycs8l6s>-E=5~$Aq%XE|}*M1cG z=Oip$uDwv!_lI%7XQH$P4>8PsHaV#S-wQV~F>wl9Q8LT5vf$7E9!b^h?70 zW;7xap)6k7Y7-zBlH`e+(uC2!MH_O(g8adL8s}DZLqkJbn-cI;whTUzya9JlPa{%w zU*NOn&vDk)dWq4PsO#6eRJ$e!c=>B3W26XyGZt0(6I*)429nlIGs$hKuOAmVB4jd| zg@uKxA2I$N#rU#P^glW_XSr&Uxjw;*;hQ&aG6o3}8_2-dffKgc=T4}U4$SuSBtCiv zA5Z|)H8rDI-t+C2w1U?UhC%OPYG&489AQ~M0F}<61x#k#Lyp5=#1_d1e z*lhNA*$Z5^Y&qHf-f-|oYsg-dxH-4kuXAtf7B4c=Rpq;U^5Vk6VQ8$g?mdP_jfaMY zhL?v&zmX!`)~3*<1aiL3T|esDHPtw{$wl&}9Uwb9lRApYlm4uWEox|NoXz~SxoHXD z2d{2RL#tX_M}tkSdI{*N%7^71Zlt8-c4`v8A(l{}px{pTB?tsUb5A9dW&w z36=}C`i1y}1fbTMYAvZ=T&XK5b%Na8e&L%(N2063z> zsy^KO80ALcUA;3;(9V*=JHtxFjAL={KYcPcHa5oLS}H2o;o-y8=>r3<@EUrFTUk!= z7OwDc7o1=Y>9T};Zql*0c+VX3$b7rR&+i;z06?O!!q|kArtBgb6r`jS6cjL-Oe0cL zV`GnO+0f8%ZEa0;(!aW-^m3)UB@VahDk~_I%#4g&tPKC4bHo?ed>E^G#_^5mquUnD zgC3cyA3hLIL$H=UNqQO3EuVl`46|;e$OXKJ9FW*49Ls5{s;EF)SzQthHW`S8qX%x~ zUcs<_>z<#!)1X00HKqBs>e#2&9e)Cwqu6GJtf1H0HDqxAfPk;y4W5rEC*^*c&Y0w@ zh5dQu!SHi|kMM`>dR(dN`ktx548kjEhL#UsPhRhV_f%ziR_cE7vtJ^e;R`vN*zMM;q%9liD=p7U(yl0Y zNPLQ>sGN4tQB6EC*;zifuRm^S@3pIylfE-C-s0xwk<|RhHx#^ctNxOcCIL^^)jI}u P{!vFevh5?HPxOBPc@S?M diff --git a/Tests/test_imageops.py b/Tests/test_imageops.py index 95b49596e79..bd5f44e5008 100644 --- a/Tests/test_imageops.py +++ b/Tests/test_imageops.py @@ -345,18 +345,12 @@ def check(orientation_im): check(orientation_im) # Orientation from "XML:com.adobe.xmp" info key - with Image.open("Tests/images/xmp_tags_orientation.png") as im: - assert im.getexif()[0x0112] == 3 - - transposed_im = ImageOps.exif_transpose(im) - assert 0x0112 not in transposed_im.getexif() + for suffix in ("", "_exiftool"): + with Image.open("Tests/images/xmp_tags_orientation" + suffix + ".png") as im: + assert im.getexif()[0x0112] == 3 - # Orientation from "XML:com.adobe.xmp" info key (from exiftool) - with Image.open("Tests/images/xmp_tags_orientation_exiftool.png") as im: - assert im.getexif()[0x0112] == 8 - - transposed_im = ImageOps.exif_transpose(im) - assert 0x0112 not in transposed_im.getexif() + transposed_im = ImageOps.exif_transpose(im) + assert 0x0112 not in transposed_im.getexif() # Orientation from "Raw profile type exif" info key # This test image has been manually hexedited from exif_imagemagick.png diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 816ea94db8d..4eb2dead655 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -1404,15 +1404,9 @@ def getexif(self): if 0x0112 not in self._exif: xmp_tags = self.info.get("XML:com.adobe.xmp") if xmp_tags: - match = re.search(r'tiff:Orientation="([0-9])"', xmp_tags) + match = re.search(r'tiff:Orientation(="|>)([0-9])', xmp_tags) if match: - self._exif[0x0112] = int(match[1]) - else: - match = re.search( - r"([0-9])", xmp_tags - ) - if match: - self._exif[0x0112] = int(match[1]) + self._exif[0x0112] = int(match[2]) return self._exif diff --git a/src/PIL/ImageOps.py b/src/PIL/ImageOps.py index b26b1858b93..48b41d87fda 100644 --- a/src/PIL/ImageOps.py +++ b/src/PIL/ImageOps.py @@ -601,15 +601,12 @@ def exif_transpose(image): "Raw profile type exif" ] = transposed_exif.tobytes().hex() elif "XML:com.adobe.xmp" in transposed_image.info: - transposed_image.info["XML:com.adobe.xmp"] = re.sub( + for pattern in ( r'tiff:Orientation="([0-9])"', - "", - transposed_image.info["XML:com.adobe.xmp"], - ) - transposed_image.info["XML:com.adobe.xmp"] = re.sub( r"([0-9])", - "", - transposed_image.info["XML:com.adobe.xmp"], - ) + ): + transposed_image.info["XML:com.adobe.xmp"] = re.sub( + pattern, "", transposed_image.info["XML:com.adobe.xmp"] + ) return transposed_image return image.copy()