zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
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
U
T±dVã@s®ddlZddlZddlZddlmZmZmZmZmZm    Z    ddl
m Z ddl
m Z dd„Zdd    „ZGd
d „d ejƒZe eje¡e eje¡e ejd ¡e ejd ¡dS)éNé)ÚExifTagsÚImageÚ    ImageFileÚ ImageSequenceÚJpegImagePluginÚTiffImagePlugin)Úi16be)Úo32lecCst |||¡dS©N)rÚ_save)ÚimÚfpÚfilename©rúId:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\PIL/MpoImagePlugin.pyr (sr c
CsÔ|j dg¡}|sJz
|j}Wntk
r4d}YnX|sJt|||ƒdSd}g}t |g|¡D]´}t |¡D]¤}|sðdt     
dd¡dd|jd    <|j d
¡}    t |    t j ƒr¾|     ¡}    |    |jd
<|    rÒ|d t|    ƒ7}t |||¡| | ¡¡qn| |d ¡| | ¡|d ¡qnq`t ¡}
d|
d<t|ƒ|
d<d} d} t|ƒD]P\} }| dkrZd}nd}| t     
d||| dd¡7} | dkrˆ| |8} | |7} qB| |
d<| |¡| dtdƒ|
 d¡¡| dtj¡dS)NÚ append_imagesFésÿâz>HéXsMPFsR                                                                                  ÚextraÚexiféZJPEGéÿÿÿÿs0100i°é°óriz<LLLHHé°sII*é)Z encoderinfoÚgetÚ is_animatedÚAttributeErrorr Ú    itertoolsÚchainrÚIteratorÚstructÚpackÚ
isinstancerÚExifÚtobytesÚlenrÚappendÚtellÚsaverZImageFileDirectory_v2Ú    enumerateÚseekÚwriter
ÚosÚSEEK_END)r rrrZanimatedZ
mpf_offsetÚoffsetsZ
imSequenceZim_framerZifdZ    mpentriesZ data_offsetÚiÚsizeÚmptyperrrÚ    _save_all,sV
 
 ÿ  
 
 
 
r5c@sPeZdZdZdZdZdd„Zddd„Zd    d
„Zd d „Z    d d„Z
e ddd„ƒZ dS)Ú MpoImageFileZMPOzMPO (CIPA DC-007)FcCs$|j d¡tj |¡| ¡dS)Nr)rr-rÚ JpegImageFileÚ_openÚ_after_jpeg_open©Úselfrrrr8ls  zMpoImageFile._openNcs¦ˆjˆ_|dk    r|nˆ ¡ˆ_ˆjdˆ_‡fdd„ˆjdDƒˆ_dˆjd<ˆjtˆjƒksbt‚ˆjd=ˆjdkˆ_    ˆj
ˆ_ ˆj   ˆjd¡dˆ_ dˆ_dˆ_dS)Nrcsg|]}|dˆjd‘qS)Z
DataOffsetÚmpoffset)Úinfo)Ú.0Zmpentr:rrÚ
<listcomp>usz1MpoImageFile._after_jpeg_open.<locals>.<listcomp>rrr<r)r3Ú _initial_sizeZ_getmpÚmpinfoZn_framesÚ_MpoImageFile__mpoffsetsr(ÚAssertionErrorr=rrÚ_fpr-Ú_MpoImageFile__frameÚoffsetÚreadonly)r;Úmpheaderrr:rr9qs 
ÿ
 zMpoImageFile._after_jpeg_opencCs|j |¡dSr )rDr-)r;ÚposrrrÚ    load_seek…szMpoImageFile.load_seekcCs.| |¡sdS|j|_|j||_|j |jd¡|j d¡}|sPd}t|ƒ‚|j|_    t
|ƒdkrêt
|j d¡ƒd}t   |j|¡|j d<| ¡|jd|dd}| d¡rè| ¡ tjj¡}d    |krèd
|krè|d    |d
f|_    nd|j kr|j d=| ¡d d |j|j|jd ffg|_||_dS)NézNo data found for frameiáÿrrÚ    AttributeZMPTypezLarge Thumbnaili i Zjpeg)rrÚ)Z _seek_checkrDrrBrFr-ÚreadÚ
ValueErrorr@Ú_sizeÚi16rÚ
_safe_readr=Z _reload_exifrAÚ
startswithZgetexifZget_ifdrZIFDr&r3ÚmodeZtilerE)r;ÚframeÚsegmentÚmsgÚnr4rrrrr-ˆs0
 
 zMpoImageFile.seekcCs|jSr )rEr:rrrr*¥szMpoImageFile.tellcCst|_| |¡|S)aC
        Transform the instance of JpegImageFile into
        an instance of MpoImageFile.
        After the call, the JpegImageFile is extended
        to be an MpoImageFile.
 
        This is essentially useful when opening a JPEG
        file that reveals itself as an MPO, to avoid
        double call to _open.
        )r6Ú    __class__r9)Z jpeg_instancerHrrrÚadopt¨s 
zMpoImageFile.adopt)N)N) Ú__name__Ú
__module__Ú __qualname__ÚformatÚformat_descriptionZ!_close_exclusive_fp_after_loadingr8r9rJr-r*Ú staticmethodrZrrrrr6gs
r6z.mpoz    image/mpo)r r/r#rMrrrrrrÚ_binaryr    rQr
r r5r7r6Z register_saver^Zregister_save_allZregister_extensionZ register_mimerrrrÚ<module>s   ;Y