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)dZd*dZGdde «ZGddej«Z GddejB«Z"Gdde ejF¬«Z$Gdd«Z%d+d,dZ& d- d.dZ'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 |rdndd|}|d|rdnddz
}t
|«S#t$rtj |«}YŒEwxYw)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ÐØˆV¡‘I¨iÐ Ð D€CÜ 3‹<Ðøô ò Üj‰j˜ÓŠð úsAÁA'Á&A'Ú_Tilecó |dS)©)Ú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
ZddZddZddZddZdˆfd Z ddZ
dd „Z dˆfd
Z dˆfd Z
dd Zdd
ZddZddZddZˆxZS)Ú ImageFilez*Base class for image file format handlers.cóDt|«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 )ˆDŒGØ(0Ð(<™HÀ"ˆDŒMà!&ˆ ð ð

ä˜d¤MÔ2Ø!%§¡£Ð-Ÿ  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ó8t|dd«rft|jt«sL|j|jk7r|jj «tt
d««|_|jr|jj «yy)_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‰GM‰M r'cóLt|dd«r|j«d|_y)NrGF)rdrfrC©rWr/s rÚ__exit__zImageFile.__exit__¼sÜ ¨%Ô N‰NÔ Øˆr'cóª |j«d|_t
|«y#t$r }tj d|«Yd}~Œ3d}~wwxYw)
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ø€ð N‰NÔ ØˆDŒGô 
øôò L‰LÐ,¨c× 2ûð 3úsƒ)© A²A
Á
Acó”g}|j«}g}tjj|vrR|tjj}|r3t |t
«s|f}|Dcgc]}|j
|«|fŒ}}|jtjj«}|r^|jtjj«r5|jJ|j||jjf«d}|D]w\}} |jJ|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|)|jJ|jj%|«|Scc}w#1swYŒ·xYw) _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ˆÜ! .´8Ø&4Ð%6*8öà×
Ó6¸
Òðð|‰|œHŸL™L×Ù D—H‘HœXŸ]™]×—:‘:Ð  K‰K˜˜tŸz™zŸÐ ˆØ (‰OˆCØ—7 !ŸW™WŸ\™\^ˆˆ'àˆˆØ#&§7¡7¬8¯=©=×+EÑ+EÓ#FРذ°nÀaÓ(HÑ—G‘G—L‘LÐ!1Ô ŸW™W¤X§]¡]×%BÑ%BÓC% f¬cÔŸ7™7Ÿ<™<¨Ó/Ÿ DÓ)˜B“ð
( +´
ؘ×1ð&0 LB”MØ—HH˜Q”KØ” Ø×# 
(ð% (ð: Ð Ø—7  G‰GL‰L˜Ô ØÐùòU÷8
(úsÁ'J8È'AJ=Ê=K cóº|jr |jS|j7tjj |jj ««Syr\)r<Úformatr
ÚMIMErÚupperr]s rÚget_format_mimetypezImageFile.get_format_mimetype
sDØ × Ò Ø× ;‰;Ð —::—>> $§+¡+×"3Ñ"3Ó"5Ó r'có<t|«|jgzSr\)r9Ú __getstate__rF)rWrZs €rrzImageFile.__getstate__sø€Ü‰wѯ©¨Ñ7r'cóbg|_t|«dkDr
|d|_t||«y))r=ÚlenrFr9Ú __setstate__)rWÚstaterZs €rzImageFile.__setstate__s-ø€ØˆŒ Ü ˆu‹:˜Š>Ø! !™HˆDŒMÜ
ј#r'cóv|jr&|jr|jj«d|_y)zCheck file integrityN)rGrCrVr]s rÚverifyzImageFile.verifys'ð
× Ò  $§'¢'Ø G‰GM‰MŒO؈r'có |js|j
d}t|«tjj |«}|js|Sd|_|j xrt|j«dk(}|jJd}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$vr| 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«Dcgc]\}}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=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†ÚmaprFrCÚhasattrr¤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/rCÚerr_codeÚprefixÚtilesÚirÚ
read_bytesÚ next_offsetÚns rr†zImageFile.load#ðyŠy˜TŸX™XÐ*ˆCܘ#“,Ð ä × Ñ  ÓØyŠy؈Là%)ˆŒØ—=‘=Ò8¤S¨¯©£^°qÑ%8ˆàw‰wЈô 4˜Ô —>>ˆ‰Hà—77—<<ˆ 4˜Ô —>>ˆ‰Hà—77—<<ˆ à26·)±)¸A±,Ñ /ˆL˜' 6¨4ܘԘa |à Ó˜t¤UÕ˜“I “Nؘ‘G˜tŸy™yÓ˜‘GœuŸÒ˜A’:Ø:$ S›/Ðä˜dŸm™mÓV°Ø#'§9¡9¨R¯Y©Y«[¸!ÀD×DTÑDT 9Ó#U˜œ÷Và § ¡ ¨!¡ ¨t°A©wÑ 6Ñ¿¹¿¹»ÒÜ% c›lÐ#Ÿj™jן $§)¡)¨\¸6À4óD”Gð !—|’|Ø-.˜Ÿ Ô
×ÑÔØˆØx‹xà I‰IN‰NœyˆNÔ ˜T =°#Ó6ˆ
!*× 1Ñ 1Ø—I‘IÑ!÷áAU“ ˜B“óˆDŒIô =FÀdÇiÁiÓ<Pó-
8Ñ8L '¨6°4ÙV” Ü×—I‘I˜|¨T°4×3EÑ3Eóð(×$ T§W¡W¨gÔן
 d§g¡gÔ.Ø#*§>¡>°#Ó#6°qÑ#9™à"˜Ø"Ø)-×)=Ñ)=˜  1™u¤s¨4¯9©9£~Ò5Ø.2¯i©i¸¸Ñ.>×.EÑ.E  Ø#.°Ò#7Ø1<¸vÑ1E >Ù$(¨Ó$4 ñ$%Ý#8Ø$)ð),Ü,/°«F¨8Ð3Hð)Jð%(ô+2°#«,Ð$6à ! ˜AØ*1¯.©.¸Ó*;™K˜A˜  1šuØ %Ø ! ! " ˜Að=#ðB—O%ð[-
&ð^ˆŒ Ø ˆŒ
à
Œà × Ò  $×"HÒ"HØ G‰GM‰MŒO؈ŒàxŠxÕ 5¸(ÀQº,ä˜x°Ô {‰{×Ñ Ó%÷yVñVûô´Ð#D—Hð$üóøô4%/´· ± Ð#=ò>å#8Ý$)à*C CÜ*1°#«,¸AÐ$=ûð
>ûð2—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)P)r
rÚnewrSrTr“r†r]s rzImageFile.load_prepare³sMà 8‰8Ð Ü—j‘j—n‘n T§Y¡Y°· ± Ó:ˆDŒGà 9‰9˜Ò Ü K‰K× Ñ ˜  r'cóyr\r$r]s rzImageFile.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;rdrPr})rWÚframers rÚ _seek_checkzImageFile._seek_checkÇs]à D—O ˜T ;Ô/°D·N±NÐ4JØœW T¨:Ó¿¹Ñ5ˆCܘ3“-Ð ày‰y{˜#r'r\)rCzStrOrBytesPath | IO[bytes]rFzstr | bytes | NoneÚreturnÚNone©)r5©r/Úobjectrá)zlist[ImageFile])ú
str | None)ú list[Any])r ©zImage.core.PixelAccess | None)r-Úbool)r0r1r2Ú__doc__r:rIr`rfrirVr”r™rr†Ú
__classcell__)rZs@rr5r5rstø„ÙNRð6Ø6Ø8Jð6à
õ6óp
óóóõ
ó(3ójõ óN&ó`
÷
$r'r5có:eZdZddZej
dd«Zy)Ú StubHandlercóyr\r$©rWr“s rrBzStubHandler.openØr^r'cóyr\r$s rr†zStubHandler.loadÛr'N)r“rK)r“rKú Image.Image)r0r1r2rBÚabcÚabstractmethodr†r$r'r×s!ó
ð ×Ñò
óñ
r'códeZdZdZej
dd«ZddZej
dd«Zy) rK
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'cóê|j«}|d|jd}t|«|j|«}|J|j|_|j
|_|j«S)Nzcannot find loader for this z file)rLrrr†rZÚ__dict__)rWrXrÚimages rr†zStubImageFile.loadìsjØˆØ ˆ>Ø·±°
¸UÐCˆCܘ#“,Ð Ø ˜DÓØÐ Ð Ð àŸˆŒØŸˆŒ
Øz‰zr'cóy)z (Hook) Find actual image loader.Nr$r]s rrLzStubImageFile._loadøsð
r'Nrã)zStubHandler | None) r0r1r2rIr†rLr$r'rrKrKàs@ñð ×Ñò
óð
ó
ð ×Ñò
óñ
r'rK)Ú metaclasscópeZdZUdZdZdZded<dZded<dZded<d Z d Z
dd
Z dd Z dd Z
dd
ZddZy)ÚParserzj
Incremental image parser. This class implements the standard
feed/close consumer interface.
NzImage.Image | Nonerøz bytes | Nonerz,Image.core.ImagingDecoder | PyDecoder | Nonerrcó*|jJd«y)
(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)rr]s rÚresetz Parser.reset sð y‰yÐ Ð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)
(Consumer) Feed data to the parser.
:param data: A string buffer.
:exception OSError: If the parser failed to parse the image file.
NrrFr®)Úfinishedrrr.Úminržr rrr
rBr=rSr?r“r) rWrÚskiprÖrCr“ÚflagÚas rÚfeedz Parser.feedsð =Š=Ø à 9‰9Р؈DŸ ™  (ˆDŒIð <Š<Ø{‰{˜äœ3˜tŸy™y›>¨4¯;©;Ó7Ø ŸI™I d ,” Ø"Ÿk™k¨DÑ0 Ø—;‘; ’?¨$¯)ª)Øà—<<×& t§y¡yÓ1‰DˆAˆ1Šuà ” Ø !
Øq5à!%D”JÜ& q°%ÔØŸ ™  ! "˜
ˆD
ZŠZð
ð
Ü—Z‘Z § ¡ Ó(¨bÜŸ B›
˜r K´7¸2¸{Ó3KÙ¤ B§G¡G£ °Ò 1à—O‘OÔ%Ø!#§¡¨¡‘JAq˜!˜ B”GÜ#(×#4Ñ#4°R·W±W¸ÀB×DTÑDTÓ#UD”LØ—LL×)¨"¯%©%°Ô#$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) rrrrrrrr
rBr†)rWrrCs rrVz Parser.closebð <Š<à I‰IcŒNØ'+Ð +ˆDŒI˜œ Ø—=,ܘc“lÐzŠzØ+ˆ˜#“,Ð Ø 9Š9ô˜DŸI™IÓ
&¨"ð&Ü!&§¡¨B£D”Jà—JJ—O‘OÕ
z‰zЈtz‰zÐøð—J‘J—O‘OÕ%ú÷ 
z‰zÐús$ C? C Â%C?à C<Ã<C?Ã?D)rrH)))r0r1r2Ú incrementalrør3rrr.rrr`rirVr$r'rþsSñð
€KØ $€EÐ Ó€DˆØ<@€GÐ

€FØ€HóG ó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éflush)r†r
r&Úmaxr@rTr´rÚ _encode_tilerrÚUnsupportedOperation)r“rCr=ÚbufsizeÚfhÚexcs rÚ_saverð‡GG„IÜ 2Ô ˆÔ؇II”)€IÔô
”(˜G R§W¡W¨Q¡Z°!¡^Ó4€Gð
Y‰Y[ˆØ
Œ
ܘT 7¨BÔˆrØ

ðøô
œB× ˜T 7¨D°#×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“Ú pushes_fdrÃÚencode_to_pyfdÚencodeÚwriteÚencode_to_filer )
r“rCr=rrrÚ encoder_namer,r.r/rÚerrcoders
rrr sð04óÑ+ˆ g˜v  AŠ:Ø G‰GFŒOÜ×# B§G¡G¨\¸×AQÑAQÓð Ø × Ñ ˜RŸU™U GÔ × Ò Ø
˜bÔ2°1Ñ5‘áàØ(/¯©°wÓ(?ÀÀÐ(C™
˜ ØŸ œÙð˜)˜%×4°R¸ÓA˜Š{Ü" 7°DÔ9¸ð
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)
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