K i,ddlmZddlmZddlmZddlmZmZddl m Z ddl m Z dd d Zdd ZGd d ejZej"ej$eej&ej$d ddZy)) annotations)BytesIO)cast)Image ImageFile)i16be)i32berawjpeg)rc$td|zddS)Ns)i32)cs Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/PIL/IptcImagePlugin.py_ir!s  a% &&c4eZdZdZdZddZd dZd dZd dZy) IptcImageFileIPTCzIPTC/NAAc2t|j|S)N)rinfo)selfkeys rgetintzIptcImageFile.getint.s$))C.!!rcl|jjd}|jdsy|d|df}|ddk7s|ddvr d }t||d }|d kDr d }t ||d k(rd}||fS|d kDr+t |jj|d z }||fSt |d }||fS)Nr )Nrrr) rrr  zinvalid IPTC/NAA filer!z%illegal field length in IPTC/NAA file)fpreadstrip SyntaxErrorOSErrorri16)rstagmsgsizes rfieldzIptcImageFile.field1s GGLLOwwwdAaDj Q44<3q6)II)Cc" "t #:9C#,  S[D Dy CZdggll4#:./DDyq!9DDyrc |jj}|j\}}|r|dk(rn|r|jj|}nd}||jvr[t |j|t r|j|j|n.|j||g|j|<n||j|<|jdd}|jdd}|dk(r |s d|_d}nC|dk(r |rd|_n|dk(r |rd |_d |jvr|jd ddz }nd}|jd |jd f|_ t|jd }|dk(r.tjdd|j z|||fg|_yy#t$r} d} t| | d} ~ wwxYw)Nr% )r!<rrLr!RGBr"CMYK)r!A)r!)r!)r!xzUnknown IPTC image compressioniptc)rr)r*tellr4r+r isinstancelistappend_moder_size COMPRESSIONKeyErrorr.r_Tiler3tile) roffsetr1r3tagdatalayers componentband compressioner2s r_openzIptcImageFile._openMsWW\\^F IC#.'',,t,diidiind3IIcN))'2&*iing%>DIIcN!( #$7#A&IIg&q) Q;yDJD{y" 1# $))#yy)!,q0[[)4;;w+??  &%dkk(&;(:F[RVDWXDI   &2C#,A % &s0F<< GGGc|jr|jdj}t|tsJ|\}}|jj |jdj t}|dk(r|jd|jz |j\}}|dk7rnS|dkDrM|jjt|d}|sn%|j||t|z}|dkDrMltj|5}|gtj d|jgtj"|j$z} || |<tj&|j$| }n|j)|j*|_dddg|_t,j,j)|S#1swY/xYw)Nrr s P5 %d %d 255 r6i r9)rJargsrBtupler*seekrKrwriter3r4r+minlenropennew getmodebandsmodemergeloadimr) rrTrPrOotyper3r0_imbandss rr_zIptcImageFile.loads 9999Q<$$DdE* ** $ K GGLL1,, - Ae#+dii78!ZZ\ d7?Qh St_5AGGAJCFND Qh A !##"YYsCHH569K9KDII9VVE"%E$K++dii7CHHJ&& !DI""''-- ! !s B GG!N)rztuple[int, int]returnint)rez"tuple[tuple[int, int] | None, int])reNone)rezImage.core.PixelAccess | None) __name__ __module__ __qualname__formatformat_descriptionrr4rRr_rrrr*s" F#"81f".rrz.iimcddlm}m}d}i}t|tr:|j j D]\}}t|ts|||<|St||jr/|j jd}|rL|jd}n:t||jr$ |jj|j}|yGdd}|} t| _t!t| } i| _t#|| _ | j'| j j D]\}}t|ts|||<|S#t$rYwxYw#t(tf$rYZwxYw)z Get IPTC information from TIFF, JPEG, or IPTC file. :param im: An image containing IPTC data. :returns: A dictionary containing IPTC information, or None if no IPTC information block was found. r)JpegImagePluginTiffImagePluginN photoshopic eZdZy)getiptcinfo..FakeImageN)rhrirjrmrr FakeImagerss rrt)rorprBrritemsrU JpegImageFileget TiffImageFiletag_v2_tagdataIPTC_NAA_CHUNKrH __class__rrr*rR IndexError) r`rorpdatarkvrqrtfake_imiptc_ims r getiptcinforso3 D79D"m$GGMMO DAq!U#Q  B55 6GGKK , ==(D B55 6 99%%o&D&DED |  kG%G='*GGLGJ   ""$1 a DG K5   (  !   s$3#E'E6' E32E36FFN)rbytesrerf)r`zImageFile.ImageFilerez1dict[tuple[int, int], bytes | list[bytes]] | None) __future__riortypingrrurr_binaryr r/r rrGrr register_openrkregister_extensionrrmrrrs"#!!F# 'x.I''x.vM((-8--v6;;6;r