Files
intellecton/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc
T

250 lines
35 KiB
Plaintext
Raw Normal View History

Ë
ß¼j¯tãó—ddlmZddlZddlZddlZddlZddlZddlZddlm Z m
Z
m Z m Z ddl
mZmZddlmZmZdZerddlmZej,e«Zd Z d
ZdZ d d d
dddœZ d)d„Zd*d„ZGd„de «ZGd„dej«Z Gd„dejB«Z"Gd„de ejF¬«Z$Gd„d«Z%d+d,d„Z& d- d.d„Z'd/d „Z(Gd!„d"«Z)Gd#„d$«Z*Gd%„d&e*«Z+Gd'„d(e*«Z,y)0é)Ú annotationsN)ÚIOÚAnyÚ
NamedTupleÚcasté)ÚExifTagsÚImage)Ú
DeferredErrorÚis_pathF)ÚStrOrBytesPathiizimage buffer overrun errorzdecoding errorz
unknown errorzbad configurationzout of memory error)éÿÿÿÿéþÿÿÿéýÿÿÿéøÿÿÿi÷ÿÿÿcóÔ— tjj|«}|s |rdnd›d|›�}|d|rdnd›d�z
}t
|«S#t$rtj |«}YŒEwxYw)NÚencoderÚdecoderz error z when ÚwritingÚreadingz image file)r
ÚcoreÚgetcodecstatusÚAttributeErrorÚERRORSÚgetÚOSError)ÚerrorrÚmsgs úP/home/antigravity/intellecton/venv/lib/python3.12/site-packages/PIL/ImageFile.pyÚ _get_oserrorr Vsv€ð Ü�j‰j×'Ñ'¨Ó.ˆñ Ù%‘¨9Ð5°W¸U¸GÐDˆØˆV¡‘I¨iÐ8¸ Ð DÑD€CÜ �3‹<Ðøô ò Ü�j‰j˜ÓŠð ús‚AÁA'Á&A'Ú_Tilecó —|dS)Né©)Úts rÚ _tilesortr&as €à ˆQ‰4€Kócó>—eZdZUded<ded<dZded<dZd ed
<y) r!ÚstrÚ
codec_nameú tuple[int, int, int, int] | NoneÚextentsrÚintÚoffsetNztuple[Any, ...] | str | NoneÚargs)Ú__name__Ú
__module__Ú __qualname__Ú__annotations__r.r/r$r'rr!r!fs!…؃OØ
-Ó-Ø€FˆCƒOØ)-€DÐ
&Ô-r'c󮇗eZdZdZ d dˆfd„
Zdd„Zdd„Zdd„Zdd„Zdˆfd„ Z dd„Z
dd „Z dˆfd
„ Z dˆfd „ Z
dd „Zdd
„Zdd„Zdd„Zdd„ZˆxZS)Ú ImageFilez*Base class for image file format handlers.cóD•—t‰|�«d|_d|_g|_ d|_d|_t|_||t|«r3t|d«|_ tj|«|_d|_n.t!t"t$|«|_ |�|nd|_d|_ |j'«t)|t*«r#|j-«x}r|j|«|j<r$|j>ddks|j>ddkr
d}t;|«‚y#t.t0t2t4t6j8f$r}t;|«|‚d}~wwxYw#t@$r(|jr|jjC«‚wxYw) Nrrr$ÚrbTÚFznot identified by this driver)"ÚsuperÚ__init__Ú
_min_frameÚcustom_mimetypeÚtileÚreadonlyÚ
decoderconfigÚMAXBLOCKÚdecodermaxblockr ÚopenÚfpÚosÚfspathÚfilenameÚ
_exclusive_fprrÚbytesÚ_openÚ
isinstanceÚ
StubImageFileÚ_loadÚ
IndexErrorÚ TypeErrorÚKeyErrorÚEOFErrorÚstructrÚ SyntaxErrorÚmodeÚsizeÚ
BaseExceptionÚclose)ÚselfrCrFÚloaderÚvrÚ __class__s €rr:zImageFile.__init__uspø€ô ‰ÑÔàˆŒà+/ˆÔà!#ˆŒ Ø*àˆŒ
à.0ˆÔÜ'ˆÔá Ù Ü �2Œ;ä˜2˜t“nˆDŒGÜŸI™I b›MˆDŒMØ!%ˆDÕ ôœ2œe™9 bÓ)ˆDŒGØ(0Ð(<™HÀ"ˆDŒMà!&ˆDÔ ð ð
,Ø—
‘
” ä˜d¤MÔ2Ø!%§¡£Ð-�vÐ-ØŸ ™  DÔ)ð—9’9 § ¡ ¨!¡ °Ò 1°T·Y±Y¸q±\ÀQÒ5FØ5�Ü! #Ó&Ð&ð6GøôÜÜÜÜ— ‘ ð ò
,ô" !“n¨!Ð+ûð
,ûôò à×!Ò!Ø—‘—
‘
”Ø ð  ús+Â1AD2Ã4=E.Ä2(E+Å E&Å&E+Å+E.Å.1Fcó—y©Nr$©rWs rrIzImageFile._open­ó€Ø r'có—|Sr\r$r]s rÚ __enter__zImageFile.__enter__±ó€Øˆ r'có8—t|dd«rft|jt«sL|j|jk7r|jj «tt
d««|_|jr|jj «yy)NÚ_fpFzOperation on closed image)ÚgetattrrJrcr rCrVÚ
ValueErrorr]s rÚ _close_fpzImageFile._close_fp´sd€Ü �4˜ Ô &¬z¸$¿(¹(ÄMÔ/RØ�x‰x˜4Ÿ7™7Ò"Ø—‘—‘Ô Ü$¤ZÐ0KÓ%LÓMˆDŒHØ �7Š7Ø �G‰G�M‰M�Oð r'cóL—t|dd«r|j«d|_y)NrGF)rdrfrC©rWr/s rÚ__exit__zImageFile.__exit__¼s€Ü �4˜¨%Ô 0Ø �N‰NÔ Øˆ�r'c󪕗 |j«d|_t
‰|�«y#t$r }tj d|«Yd}~Œ3d}~wwxYw)a¥
Closes the file pointer, if possible.
This operation will destroy the image core and release its memory.
The image data will be unusable afterward.
This function is required to close images that have multiple frames or
have not had their file read and closed by the
:py:meth:`~PIL.Image.Image.load` method. See :ref:`file-handling` for
more information.
NzError closing: %s)rfrCÚ ExceptionÚloggerÚdebugr9rV)rWrrZs €rrVzImageFile.closeÁsHø€ð 3Ø �N‰NÔ ØˆDŒGô ‰‰
�øôò 3Ü �L‰LÐ,¨c× 2Ñ 2ûð 3úsƒ)© A²A
Á
Acó”—g}|j«}g}tjj|vrR|tjj}|r3t |t
«s|f}|D�cgc]}|j
|«|f‘Œ}}|jtjj«}|r^|jtjj«r5|j€J‚|j||jjf«d}|D�]w\}} |j€J‚|jj!«}
|€|
}|j} |�Á|jtjj«} | �–| t#|dd«z
} |jj%| «|jtjj&«}
t |
t(«sJ‚|jj+|
«}t-j.|«} t1j2| «5}ddlm} €/t ||j8«r| g|_|j=d«|j?«|j|«ddd«�Œz|�)|j€J‚|jj%|«|Scc}w#1swY�Œ·xYw)NÚ _exif_offsetrr)ÚTiffImagePlugin) Úgetexifr ÚBaseÚSubIFDsrJÚtupleÚ
_get_ifd_dictÚget_ifdÚIFDÚIFD1rÚ JpegIFOffsetÚ_infoÚappendÚnextrCÚtellrdÚseekÚJpegIFByteCountr-ÚreadÚioÚBytesIOr
rBr8rpÚ
TiffImageFileÚ
_frame_posÚ_seekÚload)rWÚ child_imagesÚexifÚifdsÚsubifd_offsetsÚ
subifd_offsetÚifd1r.ÚifdÚ
ifd_offsetÚcurrent_offsetrCÚthumbnail_offsetÚlengthÚdataÚimrps rÚget_child_imageszImageFile.get_child_imagesÕsZ€Øˆ Ø�|‰|‹~ˆØˆÜ �=‰=× Ñ  DÑ (Ø!¤(§-¡-×"7Ñ"7Ñ8ˆNÙÜ! .´%Ô8Ø&4Ð%6�Nð*8öà%ð×'Ñ'¨
Ó6¸
ÒFð�ðð�|‰|œHŸL™L×-Ñ-Ó.ˆÙ �D—H‘HœXŸ]™]×7Ñ7Ô8Ø—:‘:Ð)Ð )Ð)Ø �K‰K˜˜tŸz™zŸ™Ð/Ô 0àˆØ#ó (‰OˆC�Ø—7‘7Ð&Ð &Ð&Ø!ŸW™WŸ\™\›^ˆN؈~Ø'�à—‘ˆB؈Ø#&§7¡7¬8¯=©=×+EÑ+EÓ#FÐ Ø#Ð/Ø$¬°°nÀaÓ(HÑHÐ$Ø—G‘G—L‘LÐ!1Ô2à ŸW™W¤X§]¡]×%BÑ%BÓC�FÜ% f¬cÔ2Ð2Ð2ØŸ7™7Ÿ<™<¨Ó/�DÜŸ™ DÓ)�Bä—‘˜B“ð
( 2Ý-à#Ð+´
ؘ×5Ñ5ô1ð&0 L�B”MØ—H‘H˜Q”KØ—‘” Ø×#Ñ# BÔ'÷
(ñ
(ð% (ð: Ð Ø—7‘7Ð&Ð &Ð&Ø �G‰G�L‰L˜Ô ØÐùòU÷8
(ñ
(úsÁ'J8È'AJ=Ê=K cóº—|jr |jS|j�7tjj |jj ««Syr\)r<Úformatr
ÚMIMErÚupperr]s rÚget_format_mimetypezImageFile.get_format_mimetype
sD€Ø × Ò Ø×'Ñ'Ð 'Ø �;‰;Ð "Ü—:‘:—>‘> $§+¡+×"3Ñ"3Ó"5Ó6Ð 6Ør'có<•—t‰|�«|jgzSr\)r9Ú __getstate__rF)rWrZs €rr›zImageFile.__getstate__sø€Ü‰wÑ#Ó%¨¯©¨Ñ7Ð7r'cób•—g|_t|«dkDr
|d|_t‰|�|«y)Né)r=ÚlenrFr9Ú __setstate__)rWÚstaterZs €rrŸzImageFile.__setstate__s-ø€ØˆŒ Ü ˆu‹:˜Š>Ø! !™HˆDŒMÜ
‰Ñ˜UÕ#r'cóv—|jr&|jr|jj«d|_y)zCheck file integrityN)rGrCrVr]s rÚverifyzImageFile.verifys'€ð
× Ò  $§'¢'Ø �G‰G�M‰MŒO؈�r'có —|js|j€
d}t|«‚tjj |«}|js|Sd|_|j xrt|j«dk(}|j€J‚d}t|d«r|j}d}n|jj}t|d«r|j}d}n|jj}|�ry|jd\}}} }
t|
t«r|
ddf}
|dk(�rJt|
t «�r9t|
«d k\�r*|
d|j"k(�r|
dtj$v�r| dkr
d
}t'|«‚ ddl} t+|j «5} | j)| j-«d| j.¬ «|_ddd«| |j0d|
dzz|j
j1«kDr
d }t|«‚tj2j5|j
|j0|| |
«|_d}|j8rd|j8_|jA«d
}
|j
�sÔ|jjCtD¬«tG|dd«}tIjJ|jd„«D��cgc]\}}tM|«d‘Œc}}|_tO|j«D�]I\}\}}} }
|| «tjP|j"||
|jR«} |jU|j6|«|jVr0|jY|j«|j[d«d}
n¡|} |j\}|dzt|j«kr&|j|dzj^}|| kDr|| z
} ||«}|s!tfrn?dt|«›d�}t|«‚||z}|j[|«\}}
|dkrn||d}Œž|ji«�ŒLg|_||_5|jm«|jnr&|jpr|jjs«d|_|j
stfs|
dkr
tu|
d¬«‚tjj |«S#1swY�Œ2xYw#t<tt>f$r d|_Y�Œ¸wxYwcc}}w#t`tbjdf$r}tfrYd}~�Œd}t|«|‚d}~wwxYw#|ji«wxYw)z"Load image data based on tile listNzcannot load this imagerrÚ load_readFÚ load_seekÚrawézTile offset cannot be negative)Úaccesszbuffer is not large enoughr©ÚkeyÚ tile_prefixr'có—|d|d|dfS)Nrrr§r$)r=s rú<lambda>z ImageFile.load.<locals>.<lambda>rs€¨T°!©W°d¸1±g¸tÀA¹wÐ,G€r'rzimage file is truncatedzimage file is truncated (z bytes not processed)©r);r=Ú_imrr
r†ÚmaprFržrCÚhasattrr¤r€r¥r~rJr)rtrSÚ _MAPMODESreÚmmaprBÚfilenoÚ ACCESS_READrTrÚ
map_bufferr“ÚpaletteÚdirtyrÚ ImportErrorÚ load_prepareÚsortr&rdÚ itertoolsÚgroupbyÚlistÚ enumerateÚ _getdecoderr?ÚsetimageÚpulls_fdÚsetfdÚdecoderAr.rMrQrÚLOAD_TRUNCATED_IMAGESÚcleanupr>Úload_endrGÚ!_close_exclusive_fp_after_loadingrVr )rWrÚpixelÚuse_mmapr>r€r~Ú decoder_namer,r.r/r³rCÚerr_codeÚprefixÚ_ÚtilesÚirÚbÚ
read_bytesÚ next_offsetÚsÚeÚns rr†zImageFile.load#s΀ð�yŠy˜TŸX™XÐ-Ø*ˆCܘ#“,Ð ä— ‘ × Ñ  Ó&ˆØ�yŠy؈Là%)ˆŒØ—=‘=Ò8¤S¨¯©£^°qÑ%8ˆà�w‰wÐ"Ð"Ð"؈ô �4˜Ô %Ø—>‘>ˆDà‰Hà—7‘7—<‘<ˆDä �4˜Ô %Ø—>‘>ˆD؉Hà—7‘7—<‘<ˆDâ à26·)±)¸A±,Ñ /ˆL˜' 6¨4ܘ$¤Ô$ؘa �|�à Ó%ܘt¤UÕ+ܘ“I “Nؘ‘G˜tŸy™yÓ(ؘ‘GœuŸ™Ò.à˜A’:Ø:�CÜ$ S›/Ð)ð$ãä˜dŸm™mÓ,ðV°Ø#'§9¡9¨R¯Y©Y«[¸!ÀD×DTÑDT 9Ó#U˜œ÷Và § ¡ ¨!¡ ¨t°A©wÑ 6Ñ6¸¿¹¿¹»ÒHØ:˜Ü% c›lÐ*Ü#Ÿj™j×3Ñ3ØŸ™ $§)¡)¨\¸6À4ó�D”Gð !�Hð—|’|Ø-.˜Ÿ ™ Ô*ð
×ÑÔØˆØ�x‹xà �I‰I�N‰NœyˆNÔ )ô˜T =°#Ó6ˆFô
!*× 1Ñ 1Ø—I‘IÑGó!÷á�A�uô�U“ ˜B“óˆDŒIô =FÀdÇiÁiÓ<Pó-
&Ñ8�Ñ8�L '¨6°4Ù�V” Ü×+Ñ+Ø—I‘I˜|¨T°4×3EÑ3Eó�ð(&Ø×$Ñ$ T§W¡W¨gÔ6Ø×'Ò'ØŸ
™
 d§g¡gÔ.Ø#*§>¡>°#Ó#6°qÑ#9™à"˜Ø"Ø)-×)=Ñ)=˜JØ  1™u¤s¨4¯9©9£~Ò5Ø.2¯i©i¸¸A¹Ñ.>×.EÑ.E  Ø#.°Ò#7Ø1<¸vÑ1E Jð>Ù$(¨Ó$4 ñ$%Ý#8Ø$)ð),Ü,/°«F¨8Ð3Hð)Jð%(ô+2°#«,Ð$6à ! A¡˜AØ*1¯.©.¸Ó*;™K˜A˜xØ  1šuØ %Ø ! ! " ˜Að=#ðB—O‘OÖ%ð[-
&ð^ˆŒ Ø ˆŒ
à �
‰
Œà × Ò  $×"HÒ"HØ �G‰G�M‰MŒO؈Œà�xŠxÕ 5¸(ÀQº,ä˜x°Ô7Ð 7ä�{‰{×Ñ Ó%Ð%÷yVñVûô'¬´Ð=ò$Ø#�D—Hð$üóøô4%/´· ± Ð#=ò>å#8Ý$)à*C CÜ*1°#«,¸AÐ$=ûð
>ûð2—O‘OÕ%úsoÆTÆ2S;Ç B#TËT*ÍB(U+Ï>T0ÐAU+Ó;TÔTÔT'Ô&T'Ô0U(Õ U#ÕU+ÕU#Õ#U(Õ(U+Õ+U=cóì—|j€9tjj|j|j
«|_|jdk(r tjj|«yy)NÚP)r¯r
rÚnewrSrTr“r†r]s rrºzImageFile.load_prepare³sM€à �8‰8Ð Ü—j‘j—n‘n T§Y¡Y°· ± Ó:ˆDŒGà �9‰9˜Ò Ü �K‰K× Ñ ˜TÕ "ð r'có—yr\r$r]s rrÇzImageFile.load_end»ó€à r'cóÈ—||jks4t|d«r |j�)|t|d«|jzk\r
d}t |«‚|j «|k7S)NÚ _n_framesÚn_framesz attempt to seek outside sequence)r;r±rÝrdrPr})rWÚframers rÚ _seek_checkzImageFile._seek_checkÇs]€à �D—O‘OÒ #ô˜T ;Ô/°D·N±NÐ4JØœW T¨:Ó6¸¿¹ÑHÒHð5ˆCܘ3“-Ð à�y‰y‹{˜eÑ#Ð#r'r\)rCzStrOrBytesPath | IO[bytes]rFzstr | bytes | NoneÚreturnÚNone©rárâ)rár5©r/Úobjectrárâ)rázlist[ImageFile])ráú
str | None)ráú list[Any])r rçrárâ©rázImage.core.PixelAccess | None)rßr-ráÚbool)r0r1r2Ú__doc__r:rIr`rfrirVr”r™r›rŸr¢r†rºrÇràÚ
__classcell__)rZs@rr5r5rstø„Ù4ðNRð6Ø,ð6Ø8Jð6à
õ6óp
óóóõ
ó(3ójõ8õ$ó óN&ó`#ó
÷
$r'r5có:—eZdZdd„Zej
dd„«Zy)Ú StubHandlercó—yr\r$©rWr“s rrBzStubHandler.openØr^r'có—yr\r$rïs rr†zStubHandler.loadÛrÛr'N)r“rKrárâ)r“rKráú Image.Image)r0r1r2rBÚabcÚabstractmethodr†r$r'rrírí×s!„ó
ð ×Ñò
óñ
r'rícód—eZdZdZej
dd„«Zdd„Zej
dd„«Zy) rKz±
Base class for stub image loaders.
A stub loader is an image loader that can identify files of a
certain format, but relies on external code to load the file.
có—yr\r$r]s rrIzStubImageFile._openèrÛr'cóê—|j«}|€d|j›d�}t|«‚|j|«}|€J‚|j|_|j
|_|j«S)Nzcannot find loader for this z file)rLr–rr†rZÚ__dict__)rWrXrÚimages rr†zStubImageFile.loadìsj€Ø—‘“ˆØ ˆ>Ø0°·±°
¸UÐCˆCܘ#“,Ð Ø— ‘ ˜DÓ!ˆØÐ Ð Ð àŸ™ˆŒØŸ™ˆŒ
Ø�z‰z‹|Ðr'có—y)z (Hook) Find actual image loader.Nr$r]s rrLzStubImageFile._loadøs€ð
r'Nrãrè)rázStubHandler | None) r0r1r2rêròrórIr†rLr$r'rrKrKàs@„ñð ×Ñò
óð
ó
ð ×Ñò
óñ
r'rK)Ú metaclasscóp—eZdZUdZdZdZded<dZded<dZded<d Z d Z
dd
„Z dd „Z dd „Z
dd
„Zdd„Zy)ÚParserzj
Incremental image parser. This class implements the standard
feed/close consumer interface.
NzImage.Image | Nonerøz bytes | Noner’z,Image.core.ImagingDecoder | PyDecoder | Nonerrcó*—|j�Jd«‚y)zµ
(Consumer) Reset the parser. Note that you can only call this
method immediately after you've created a parser; parser
instances cannot be reused.
Nzcannot reuse parsers)r’r]s rÚresetz Parser.reset s€ð �y‰yÐ Ð8Ð"8Ó8Ñ r'có6—|jry|j€||_n|j|z|_|jræ|jdkDrmt t |j«|j«}|j|d|_|j|z
|_|jdkDs |jsy|jj
|j«\}}|dkr(d|_d|_|dkrd|_t|d¬«‚y|j|d|_y|jry tj|j«5}tj|«}ddd«td«xs t|d«}|sèt |j«dk(rÐ|j«|jd\}}} }
g|_tj |j"||
|j$«|_|jj'|j(|«| |_|jt |j«kr%|j|jd|_d|_||_y#1swY�ŒxYw#t*$rYywxYw)z¦
(Consumer) Feed data to the parser.
:param data: A string buffer.
:exception OSError: If the parser failed to parse the image file.
NrrFr®r¥r¤)Úfinishedr’rr.ÚminržrÄrør r�r‚r
rBr±r=rºrÀrSr?rÁr“r) rWr’ÚskiprÖrÕrCr“ÚflagÚdÚoÚas rÚfeedz Parser.feeds€ð �=Š=Ø à �9‰9Р؈D�IàŸ ™  DÑ(ˆDŒIð �<Š<Ø�{‰{˜QŠäœ3˜tŸy™y›>¨4¯;©;Ó7�Ø ŸI™I d eÐ,�” Ø"Ÿk™k¨DÑ0�” Ø—;‘; ’?¨$¯)ª)Øà—<‘<×&Ñ& t§y¡yÓ1‰DˆAˆqà�1Šuà �” Ø !�”
Ø�q’5à!%�D”JÜ& q°%Ô8Ð8ðØŸ ™  ! "˜
ˆD�Ià
�ZŠZð
ð
Ü—Z‘Z § ¡ Ó*ð(¨bÜŸ™ B›�B÷(ô
˜r ;Ó/ÒK´7¸2¸{Ó3K�Ù¤ B§G¡G£ °Ò 1à—O‘OÔ%Ø!#§¡¨¡‘J�A�q˜!˜QØ �B”GÜ#(×#4Ñ#4°R·W±W¸aÀÀB×DTÑDTÓ#U�D”LØ—L‘L×)Ñ)¨"¯%©%°Ô3ð#$�D”KØ—{‘{¤c¨$¯)©)£nÒ4Ø$(§I¡I¨d¯k©k¨mÐ$<˜œ Ø&'˜œ à�•
÷)(ñ(ûäò
Ùð
ús*Ä6J ÅI?Å+J É?J ÊJ Ê JÊJcó—|Sr\r$r]s rr`zParser.__enter__\rar'có$—|j«yr\)rVrhs rrizParser.__exit___s €Ø �
‰
� r'có,—|jr8|jd«dx|_|_|js
d}t |«‚|j
s
d}t |«‚|jrjt
j|j«5} tj|«|_|j
j« ddd«|j
S|j
S#|j
j«wxYw#1swY|j
SxYw)a
(Consumer) Close the stream.
:returns: An image object.
:exception OSError: If the parser failed to parse the image file either
because it cannot be identified or cannot be
decoded.
r'Nzimage was incompletezcannot parse this image) rrr’rrrør�r‚r
rBr†)rWrrCs rrVz Parser.closebsЀð �<Š<à �I‰I�cŒNØ'+Ð +ˆDŒI˜œ Ø—=’=Ø,�ܘc“lÐ"Ø�zŠzØ+ˆCܘ#“,Ð Ø �9Š9ô—‘˜DŸI™IÓ&ð
&¨"ð&Ü!&§¡¨B£�D”Jà—J‘J—O‘OÕ%÷ 
&ð
�z‰zЈt�z‰zÐøð—J‘J—O‘OÕ%ú÷ 
&ð
�z‰zÐús$ C? C Â%C?à C<Ã<C?Ã?Drã)r’rHrárâ)rárürä)rárñ)r0r1r2rêÚ incrementalrør3r’rr.rrþrr`rirVr$r'rrürüþsS…ñð
€KØ $€EÐ Ó$Ø€Dˆ,ÓØ<@€GÐ
9Ó@Ø
€FØ€Hó9óG óRóôr'rüc ó¾—|j«t|d«sd|_|jt¬«t t ||jddz«} |j«}|j«t|||||«t|d«r|j«yy#ttjf$r}t||||d|«Yd}~ŒLd}~wwxYw)z«Helper to save image based on tile list
:param im: Image object.
:param fp: File object.
:param tile: Tile list.
:param bufsize: Optional buffer size
Ú
encoderconfigr$r©réNÚflush)r†r±r
r»r&Úmaxr@rTr´rÚ _encode_tilerr�ÚUnsupportedOperation)r“rCr=ÚbufsizeÚfhÚexcs rÚ_saver„s¾€ð‡G�G„IÜ �2�Ô 'ØˆÔØ‡I�I”)€IÔô
”(˜G R§W¡W¨Q¡Z°!¡^Ó4€Gð7Ø
�Y‰Y‹[ˆØ
�‰Œ
Ü�R˜˜T 7¨BÔ/ôˆr�7ÔØ
�‰�
ðøô
œB×3Ñ3Ð 4ò7Ü�R˜˜T 7¨D°#×6Ñ6ûð7úsÁ/B)Â)CÃCÃCcó<—|D�]\}}}} |dkDr|j|«tj|j|| |j«}
|
j |j |«|
jr%|
j|«|
j«d} nE|r- |
j|«dd\} } |j| «| rnŒ,|€J‚|
j||«} | dkrt| d¬«|‚ |
j«�Œy#|
j«wxYw)NrrTr®)r~r
Ú _getencoderrSr
rÁr“Ú pushes_fdrÃÚencode_to_pyfdÚencodeÚwriteÚencode_to_filer rÆ)
r“rCr=rrrÚ encoder_namer,r.r/rÚerrcoder’s
rrr s€ð04óÑ+ˆ �g˜v tØ �AŠ:Ø �G‰G�FŒOÜ×#Ñ# B§G¡G¨\¸4À×AQÑAQÓRˆð Ø × Ñ ˜RŸU™U GÔ ,Ø× Ò Ø—
‘
˜bÔ!Ø!×0Ñ0Ó2°1Ñ5‘áàØ(/¯©°wÓ(?ÀÀÐ(C™
˜ ØŸ™ œÙ"Ø!ð ð˜>Ð)˜>Ø%×4Ñ4°R¸ÓA�GؘŠ{Ü" 7°DÔ9¸sÐBðð
�O‰OÖ ñ1øð0
�O‰OÕ ús
ÁB%D Ä Dcó‚—|dkry|tkr.|j|«}t|«|kr
d}t|«‚|Sg}|}|dkDrG|jt |t««}|sn%|j |«|t|«z}|dkDrŒGt
d„|D««|kr
d}t|«‚dj|«S)a»
Reads large blocks in a safe way. Unlike fp.read(n), this function
doesn't trust the user. If the requested size is larger than