1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
U
T±dâ-ã @söddlmZmZddlmZddlmZddlmZdZ    ddddddd    d
d d    d œ
Z
d d„Z Gdd„dejƒZ Gdd„dej ƒZGdd„dej ƒZdd„Ze e je e ¡e e je¡e de¡e de¡e e jddddg¡e e jd¡dS)é)ÚImageÚ    ImageFile)Úi16be)Úo8)Úo32les     
Ú1ÚLÚRGBZCMYKÚPÚRGBA)
óP1óP2óP3óP4óP5óP6sP0CMYKsPyPsPyRGBAsPyCMYKcCs|dd…dko|ddkS)NéróPs0123456y©)ÚprefixrrúId:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\PIL/PpmImagePlugin.pyÚ_accept-src@s,eZdZdZdZdd„Zdd„Zdd„Zd    S)
Ú PpmImageFileZPPMz Pbmplus imagecCs:d}tdƒD](}|j d¡}|r(|tkr,q6||7}q |S)Nóér)ÚrangeÚfpÚreadÚ b_whitespace)ÚselfÚmagicÚ_ÚcrrrÚ _read_magic9s   
zPpmImageFile._read_magiccCs”d}t|ƒdkr\|j d¡}|s$q\n.|tkr6|s\qq\n|dkrR|j d¡dkrq>q||7}q|snd}t|ƒ‚n"t|ƒdkrd| ¡›}t|ƒ‚|S)Nré
ró#s
z Reached EOF while reading headerzToken too long in file header: )ÚlenrrrÚ
ValueErrorÚdecode)rÚtokenr"ÚmsgrrrÚ _read_tokenCs*  
 
 zPpmImageFile._read_tokenc Cs’| ¡}z t|}Wn tk
r4d}t|ƒ‚YnX|dkrFd|_n|dkrVd|_n|dkrdd|_d}d}|d    krxd
}td ƒD]È}t| ¡ƒ}|d krž|}q€|d krÐ|}    |dkrÄd|_d}
qJn
||_}
q€|dkr€|}d |kròdksnd}t    |ƒ‚|dkr|dkrd|_|d
kr€|dkr<|dkr<d}
q€|dkr€d}q€|dkr^|
d d fn|
|f} ||    f|_
|d d ||    f|j   ¡| fg|_ dS)Nznot a PPM file)r rzimage/x-portable-bitmap)r rzimage/x-portable-graymap)rrzimage/x-portable-pixmapÚraw)r r rÚ    ppm_plainérrrú1;Iéiz1maxval must be greater than 0 and less than 65536éÿrÚIéÿÿúI;16BÚppm)r#ÚMODESÚKeyErrorÚ SyntaxErrorZcustom_mimetyperÚintr+Úmoder'Ú_sizerÚtellZtile) rZ magic_numberr:r*ÚmaxvalZ decoder_nameÚixr)ÚxsizeÚysizeÚrawmodeÚargsrrrÚ_open]sT    
zPpmImageFile._openN)Ú__name__Ú
__module__Ú __qualname__ÚformatÚformat_descriptionr#r+rCrrrrr5s
 
rc@sBeZdZdZdd„Zddd„Zdd„Zd    d
„Zd d „Zd d„Z    dS)ÚPpmPlainDecoderTcCs|j tj¡S)N)ÚfdrrZ    SAFEBLOCK)rrrrÚ _read_block—szPpmPlainDecoder._read_blockrcCs8| d|¡}| d|¡}||dkr.t||ƒSt||ƒS)Nó
ó r)ÚfindÚminÚmax)rÚblockÚstartÚaÚbrrrÚ_find_comment_endšs  z!PpmPlainDecoder._find_comment_endcCs |jr:|r:| |¡}|dkr0||dd…}q:q| ¡}qd|_| d¡}|dkrTqœ| ||¡}|dkr†|d|…||dd…}q@|d|…}d|_qœq@|S)NéÿÿÿÿrFr%T)Ú_comment_spansrUrKrN)rrQZ comment_endÚ comment_startrrrÚ_ignore_commentsŸs$
 
 
  z PpmPlainDecoder._ignore_commentscCs˜tƒ}|jj|jj}t|ƒ|kr‚| ¡}|s0q‚| |¡}d | ¡¡}|D]"}|dkrLdt    |gƒ}t
|ƒ‚qL||d|…}qt      dd¡}|  |¡S)z¥
        This is a separate method because in the plain PBM format, all data tokens are
        exactly one byte, so the inter-token whitespace is optional.
        r)é0é1sInvalid token for this mode: %sNs01sÿ) Ú    bytearrayÚstater?r@r&rKrYÚjoinÚsplitÚbytesr'Ú    maketransÚ    translate)rÚdataÚ total_bytesrQÚtokensr)r*ÚinvertrrrÚ_decode_bitonalÁs 
 
 zPpmPlainDecoder._decode_bitonalcCs†tƒ}d}|jdkrdnd}|jdkr*dnd}t |j¡}|jj|jj||}d}t|ƒ|kr‚| ¡}    |    s‚|r~tdƒ}    nq‚|     |    ¡}    |rœ||    }    d}|     
¡}
|    rè|    d    d…  ¡sè|
  ¡}t|ƒ|krèd
|d|d…} t | ƒ‚|
D]’} t| ƒ|krd
| d|d…} t | ƒ‚t| ƒ} | |kr>d | ›} t | ƒ‚t| ||ƒ} ||jdkrdt| ƒnt| ƒ7}t|ƒ|krìqVqìqV|S) Nr$r2érr3r1Fó rVs Token too long found in data: %sz'Channel value too large for this mode: )r\r:rÚ getmodebandsr]r?r@r&rKrYr_ÚisspaceÚpopr'r9ÚroundÚo32r)rr=rcÚmax_lenÚout_byte_countÚout_maxÚbandsrdZ
half_tokenrQrer*r)ÚvaluerrrÚ_decode_blocksÚsJ 
 
 ÿ
 
  zPpmPlainDecoder._decode_blockscCsZd|_|jdkr| ¡}d}n(|jd}| |¡}|jdkr@dn|j}| t|ƒ|¡dS)NFrz1;8rVr2úI;32©rVr)rWr:rgrBrtÚ
set_as_rawr`)rÚbufferrcrAr=rrrr(
s
 
 
zPpmPlainDecoder.decodeN)r)
rDrErFÚ    _pulls_fdrKrUrYrgrtr(rrrrrI”s
"0rIc@seZdZdZdd„ZdS)Ú
PpmDecoderTc Cstƒ}|jd}|dkrdnd}|jdkr.dnd}|jdkr@dnd}t |j¡}t|ƒ|jj|jj||krô|j     
||¡}t|ƒ||kr’qôt |ƒD]V}    |dkr®||    n t ||    |ƒ}
t |t|
||ƒƒ}
||jdkræt|
ƒnt|
ƒ7}qšqP|jdkrd    n|j} | t|ƒ| ¡d
S) NrVérr0r2rhr3r1rurv)r\rBr:rrjr&r]r?r@rJrrÚi16rOrmrnrrwr`) rrxrcr=Z in_byte_countrprqrrZpixelsrTrsrArrrr(s$
   ÿ"zPpmDecoder.decodeN)rDrErFryr(rrrrrzsrzc
CsÜ|jdkrd\}}nR|jdkr(d\}}n>|jdkr<d\}}n*|jdkrPd\}}nd    |j›d
}t|ƒ‚| |d |j¡|d krŽ| d ¡n&|dkr´|dkrª| d ¡n
| d¡t ||dd|jd|ddffg¡dS)Nr)r/rr)rrr2)r4r)r    r )r    rzcannot write mode z as PPMs
%d %d
rs255
rs65535
r,)rrrr)r:ÚOSErrorÚwriteÚsizerÚ_save)ZimrÚfilenamerAÚheadr*rrrr€5s$
 
 
 
 
 
 
 
 
r€r5r-z.pbmz.pgmz.ppmz.pnmzimage/x-portable-anymapN)ÚrrÚ_binaryrr|rrrnrr6rrZ    PyDecoderrIrzr€Z register_openrGZ register_saveZregister_decoderZregister_extensionsZ register_mimerrrrÚ<module>s6   ó_