B ]@sddlmZddlZddlZddlmZmZddlmZm Z m Z m Z dZddd Ze dd Zd d Zd dZGdddejZeejeeejdddZdS))print_functionN)Image ImageFile)i8i16bei32beo8z0.3rawZjpeg)rcCstt|ddS)N)i32PAD)cr5/tmp/pip-build-ktz6qwqq/Pillow/PIL/IptcImagePlugin.pyi'srcCs,x |D]}tdt|ddqWtdS)Nz%02x )end)printr)rrrrrdump+s rc@s4eZdZdZdZddZddZddZd d Zd S) IptcImageFileZIPTCzIPTC/NAAcCst|j|S)N)rinfo)selfkeyrrrgetint;szIptcImageFile.getintcCs|jd}t|sdSt|dt|df}t|ddksX|ddksX|ddkr`tdt|d }|d kr~td n<|d krd}n.|d krt|j|d }nt|d d}||fS) Nr )Nrrr zinvalid IPTC/NAA filez%illegal field length in IPTC/NAA file)fpreadlenr SyntaxErrorIOErrorri16)rstagsizerrrfield>s (  zIptcImageFile.fieldc Csx|j}|\}}|r$|dkr&P|r8|j|}nd}||jkr~t|j|trh|j||q|j||g|j|<q||j|<qWt|jdd}t|jdd}d|jkrt|jddd}nd}|dkr|sd|_ n6|dkr|rd||_ n|d kr |r d ||_ | d | d f|_ yt | d }Wnt k rftdYnX|dkrd||fdd|jd|jdffg|_dS)N) )r <rr)r ALr ZRGBr ZCMYK)r )r )r xzUnknown IPTC image compressioniptc)r#tellr,r$r isinstancelistappendrmoder_size COMPRESSIONKeyErrorr'r+tile) roffsetr*r+tagdataZlayers componentid compressionrrr_openXs>         zIptcImageFile._openc Cs.t|jdks |jdddkr,tj|S|jd\}}}|\}}|j|tjdd\}}t |}|dkr| d|j xV| \}} |dkrPx:| dkr|j t| d } | sP| | | t| 8} qWqW|zt|} | | j|_Wdyt|Wntk r&YnXXdS) Nrrr5F)textr z P5 %d %d 255 )r-r.i )r%r>rloadr#seektempfilemkstemposfdopenwriter+r,r$mincloseropenimunlinkOSError) rtyper>Zboxencodingr?Zo_fdoutfileor+r)Z_imrrrrFs8         zIptcImageFile.loadN) __name__ __module__ __qualname__formatformat_descriptionrr,rDrFrrrrr6s 1rz.iimc Csddlm}m}ddl}d}t|tr,|jSt||jrT|jd}|r|d}n8t||j ry|j j |j }Wnt tfk rYnX|dkrdSGdddt}|}t|_i|_|||_y |Wnttfk rYnX|jS) 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)TiffImagePluginJpegImagePluginrN photoshopic@s eZdZdS)zgetiptcinfo..FakeImageN)rWrXrYrrrr FakeImagesr_)r\r]ior7rrZ JpegImageFilegetZ TiffImageFiler*r@ZIPTC_NAA_CHUNKAttributeErrorr=object __class__BytesIOr#rD IndexError)rPr\r]radatar^r_rrr getiptcinfos4       ri) __future__rrJrHr`rr_binaryrrr(rrr __version__r<rrrrZ register_openrZZregister_extensionrirrrrs    |