)Ej"ddlmZddlZddlmZddlmZmZddlm Z ddlm Z ddlm Z dd ZGddejZGddejZddZGddejZejejeeejdeejejdejejeejdedS) ) annotationsN)IO)Image ImageFile)i32be)o8)o32beprefixbytesreturnboolc,|dS)Nqoif) startswith)r s DC:\PYTHON\MyICR_Suite\python\Lib\site-packages\PIL/QoiImagePlugin.py_acceptrs   W % %%ceZdZdZdZddZdS) QoiImageFileQOIzQuite OK Imager NonecL|jJt|jdsd}t|t |jdt |jdf|_|jdd}|dkrdnd|_|jdtj tj dd |jz|j g|_ dS) Nznot a QOI filerrRGBRGBAqoirr)fprread SyntaxErrori32_size_modeseekosSEEK_CURr_Tiletelltile)selfmsgchannelss r_openzQoiImageFile._opensw"""tw||A'' #"Cc"" "a))3tw||A+?+?? 7<<??1%&!mmUU   Q $$$_UFTZ,?PPQ rN)r r)__name__ __module__ __qualname__formatformat_descriptionr/rrrrs9 F) R R R R R Rrrc@eZdZUdZdZded<iZded<dd ZddZdS) QoiDecoderTNzbytes | bytearray | None_previous_pixelzdict[int, bytes | bytearray]_previously_seen_pixelsvaluebytes | bytearrayr rcj||_|\}}}}|dz|dzz|dzz|dzzdz}||j|<dS)Nr @)r8r9)r,r:rgba hash_values r_add_to_previous_pixelsz"QoiDecoder._add_to_previous_pixels/sR$ 1a!ea!ema!e+a"f4: 38$Z000rbufferImage.DecoderInputtuple[int, int]c  jJi_td_t}t jj}jjjj z|z}t||krAj dd}|dkr@jr9tj djddz}n|dkrj d}n{|dz }|dkr/|d z}j |td }nA|dkrqjrjtjd|d zdz zd z d zjd|dzd z zd z d zjd |dzzd z d zjdf}n|d krjrj dd} |d zdz | dzdz dz } | dzdz } tt fdt| d| fD}|jddz }n6|dkr0jr)|d zdz} j}|dkr |dd}||| zz }||dkr |dd}||z }t||kA|dS)NrrrrrrrLr?rrrr0 c3JK|]\}}j|z|zdzVdS)rSN)r8).0idiff diff_greenr,s r z$QoiDecoder.decode.._sR '4"1!4zADHCOr)r)fdr9 bytearrayr8r getmodebandsmodestatexsizeysizelenr!gettuple enumeraterF set_as_raw)r,rGdatabands dest_lengthbyter:opop_index second_bytediff_red diff_blue run_lengthr]s` @rdecodezQoiDecoder.decode6sBw"""')$(88{{"49--j&)99EA $ii+%%7<<??1%Dz!!d&:!!$',,q//22T5I!""5MM## QQY77#j0H 8<< )L"9"9EE1WW!5W%!1!4 9Jq8PQTUU!"!1!4 9Jq8PQTUU!"!1!4z8IJQNRUU 03   EE1WW!5W"&',,q//!"4K"&"3r!9J!,z!9a ?1DH!,z!9Q >I%+4h95M+N+NE T1!""55EE1WW!5W"&"3q!8J 0Ezz %bqb EJ..D  ( ( / / /zzbqb  EMDc$ii+%%d ur)r:r;r r)rGrHr rI) r0r1r2 _pulls_fdr8__annotations__r9rFrvr5rrr7r7*sfI04O4444<>>>>>9999<<<<<<rr7im Image.Imager IO[bytes]filename str | bytesrc n|jdkrd}n|jdkrd}nd}t||jddkrdnd }|d |t |jd|t |jd |t||t|tj ||tj d d |jzgdS) NrrrrzUnsupported QOI image mode colorspacesRGBrrrrr) rc ValueError encoderinforhwriteo32sizer r_saver))ryr r|r.r-rs rrrus  w% F  *oon((66&@@aJHHWHHS__HHS__HHR\\HHR ^^ OBY_UFRW4DEEFGGGGGrcLeZdZUdZdZded<iZded<dZdd ZddZ ddZ dS) QoiEncoderTNz tuple[int, int, int, int] | Noner8z$dict[int, tuple[int, int, int, int]]r9rr r cHtd|jdz z}d|_|S)Nrr)r _run)r,rls r _write_runzQoiEncoder._write_runs&* A .//  rleftintrightc,||z dz}|dkr|dz}|S)NrLrSr5)r,rrresults r_deltazQoiEncoder._deltas',#% S== cMF rbufsizetuple[int, int, bytes]c|jJddi|_d|_t}|jj\}}t j|j}t|D]}t|D]}|j ||f}|dkrg|dR}||jkr4|xj dz c_ |j dkr|| z }n|j r|| z }|\} } } } | dz| dzz| d zz| d zzd z} |j | |kr|t| z }n|jr||j| <|j\}}}}|| kr]|| |}|| |}|| |}d |cxkrd krNnnKd |cxkrd kr>nn;d |cxkrd kr.nn+|td |d zdzz|d zd zz|d zzz }n|||}|||}d|cxkrdkrZnnWd|cxkrdkrJnnGd|cxkrdkr:nn7|td|dzzz }|t|dzdz|dzzz }nQ|tdz }|t|ddz }n$|tdz }|t|z }||_|j r|| z }|tdz }t!|dt|fS)NrrPrKrrLr>r=r>r?r@rRrirWirUrrM)rrrrrrrr)ryr9r8rarrrbrcrangegetpixelrrrhr rr rg)r,rrlwhrmyxpixelrArBrCrDrEprev_rprev_gprev_bprev_adelta_rdelta_gdelta_bdelta_grdelta_gbs rencodezQoiEncoder.encodesw"""()<'8$-{{w|1"49--q9 -9 -A1XX8 -8 -((!Q00A::)eMSMMED000IINIIyB 1 11y2 1 11!&JAq!Q"#a%!a%-!a%"7!b&"@B!FJ377 CCuLL:.-%1CH4Z@9=9M6!Q;;&*kk!V&<&rs#""""" !!!!!!!!!!!!&&&&RRRRR9&RRR&HHHHH$HHHVHHHH(Z)Z)Z)Z)Z)$Z)Z)Z)zL'w???uj))),f555L'///uj)))))r