
    th?-                     F   d dl Z d dlZd dlZddlmZmZmZ  G d d          Zd Zd Z	d Z
 G d	 d
ej                  Zd Zd Z ej        ej        ee            ej        ej        e            ej        ej        g d            ej        ej        d           dS )    N   )Image	ImageFile_binaryc                   >    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
S )	BoxReaderz}
    A small helper class to read fields stored in JPEG2000 header boxes
    and to easily step into and read sub-boxes.
    c                 F    || _         |dk    | _        || _        d| _        d S )Nr   r	   )fp
has_lengthlengthremaining_in_box)selfr   r   s      i/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/PIL/Jpeg2KImagePlugin.py__init__zBoxReader.__init__   s)     A+ "    c                     | j         r'| j                                        |z   | j        k    rdS | j        dk    r|| j        k    S dS )NFr   T)r   r   tellr   r   )r   	num_bytess     r   	_can_readzBoxReader._can_read#   sM    ? 	tw||~~	9DKGG5 A%% 5554r   c                 ,   |                      |          sd}t          |          | j                            |          }t	          |          |k     r%d| dt	          |           d}t          |          | j        dk    r| xj        |z  c_        |S )NzNot enough data in headerzExpected to read z bytes but only got .r   )r   SyntaxErrorr   readlenOSErrorr   )r   r   msgdatas       r   _read_byteszBoxReader._read_bytes-   s    ~~i(( 	#-Cc"""w||I&&t99y  QiQQSYYQQQC#,, 1$$!!Y.!!r   c                 ~    t          j        |          }|                     |          }t          j        ||          S N)structcalcsizer   unpack)r   field_formatsizer   s       r   read_fieldszBoxReader.read_fields;   s6    |,,%%}\4000r   c                 ~    | j         }|                     |          }t          t          j        |          |          S r!   )r   r   r   ioBytesIO)r   r&   r   s      r   
read_boxeszBoxReader.read_boxes@   s7    $%%D))4000r   c                 h    | j         r*| j                                        | j        z   | j        k     S dS )NT)r   r   r   r   r   )r   s    r   has_next_boxzBoxReader.has_next_boxE   s0    ? 	7<<>>D$99DKGG4r   c                 l   | j         dk    r*| j                            | j         t          j                   d| _         |                     d          \  }}|dk    r|                     d          d         }d}nd}||k     s|                     ||z
            sd}t          |          ||z
  | _         |S )	Nr   r	   z>I4sr   z>Q      zInvalid header length)r   r   seekosSEEK_CURr'   r   r   )r   lboxtboxhlenr   s        r   next_box_typezBoxReader.next_box_typeK   s     1$$GLL.<<< " %%f--
d199##D))!,DDDD$;;dnnTD[99;)Cc""" $tr   N)r	   )__name__
__module____qualname____doc__r   r   r   r'   r+   r-   r7    r   r   r   r      s         
# # # #    1 1 1
1 1 1
      r   r   c                    |                      d          }t          j        |          }||                      |dz
            z   }t          j        d|          \  }}}}}}}	}	}	}	}
dg|
z  }dg|
z  }dg|
z  }t          |
          D ]+}t          j        d|dd|z  z             \  ||<   ||<   ||<   ,||z
  ||z
  f}|
dk    r|d         d	z  d
k    rd}n d}n|
dk    rd}n|
dk    rd}n|
dk    rd}nd}||fS )zParse the JPEG 2000 codestream to extract the size and component
    count from the SIZ marker segment, returning a PIL (size, mode) tuple.   z>HHIIIIIIIIHNz>BBB$      r   r      r0   I;16LLARGB   RGBA)r   r   i16ber"   unpack_fromrange)r   hdrlsizsizrsizxsizysizxosizyosiz_csizssizxrsizyrsizir&   modes                    r   _parse_codestreamrZ   a   sP    ''!**C=D
q!!
!C=C=O> >:D$dE5!Q1d 6D=DFTMEFTME4[[ R R&,&8b1q5j&Q&Q#Qq5885L$,'Dqyy!HtOq  DDDD			:r   c                 4    |dk    rd| z  d|z  z  d|z  z  S dS )zConvert JPEG2000's (numerator, denominator, exponent-base-10) resolution,
    calculated as (num / denom) * 10^exp and stored in dots per meter,
    to floating-point dots per inch.r      
   i'  Nr<   )numdenomexps      r   _res_to_dpira      s0     zzc	RW%%%-88 zr   c                    t          |           }d}d}|                                rj|                                }|dk    r|                                }n;|dk    r!|                    d          d         dk    rd}|                                jd}d}d}d}d}	|                                r&|                                }|dk    rT|                    d	          \  }
}}}||
f}|d
k    r|dz  dk    rd}n|d
k    rd}n|dk    rd}n|dk    rd}n|dk    rd}n|dk    r|                                }|                                ru|                                }|dk    rG|                    d          \  }}}}}}t          |||          }t          |||          }||||f}	n|                                u|                                &||d}t          |          ||||	fS )zParse the JP2 header box to extract size, component count,
    color space information, and optionally DPI information,
    returning a (size, mode, mimetype, dpi) tuple.Ns   jp2hs   ftypz>4sr   s   jpx z	image/jpxs   ihdrz>IIHBr   rA   r0   rB   rC   r>   rD   r@   rE   rF   rG   s   res s   rescz>HHHHBBzMalformed JP2 header)r   r-   r7   r+   r'   ra   r   )r   readerheadermimetyper5   r&   rY   bpcncdpiheightwidthrestresvrcnvrcdhrcnhrcdvrcehrcehresvresr   s                          r   _parse_jp2_headerru      s`    r]]FFH




 '##%%7??&&((FW__!!%((+w66& 



 ' DD
C	B
C




 ##%%7??%+%7%7%@%@"FE2s6?DQwwC$J!++qqqqW__##%%C""$$ ((**7??9<9S9S6D$dD$&tT488D&tT488D'D,<#Tl ""$$ % 



 8 |t|$#x$$r   c                   h     e Zd ZdZdZd Zd Ze fd            Zej	        d             Zd Z
 xZS )Jpeg2KImageFileJPEG2000zJPEG 2000 (ISO 15444)c                 F   | j                             d          }|dk    r)d| _        t          | j                   \  | _        | _        n|| j                             d          z   }|dk    rd| _        t          | j                   }|\  | _        | _        | _        }|
|| j        d<   | j                             d          	                    d	          r| 
                                 nd
}t          |          | j        | j        d}t          |          d| _        d| _        d}d}	 | j                                         }t!          j        |          j        }n# t&          $ r d}	 | j                                         }| j                             dt,          j                   | j                                         }| j                             |           n# t&          $ r d}Y nw xY wY nw xY wdd| j        z   d| j        | j        | j        ||ffg| _        d S )NrF      OQj2kr0         jP  

jp2rh      s   jp2cOQznot a JPEG 2000 filezunable to determine size/moder   r	   jpeg2kr   r   )r   r   codecrZ   _sizerY   ru   custom_mimetypeinfoendswith_parse_commentr   r&   _reducelayersfilenor2   fstatst_size	Exceptionr   r1   r)   SEEK_ENDtile)r   sigrd   rh   r   fdr   poss           r   _openzJpeg2KImageFile._open   s   gll1oo%%%DJ$5dg$>$>!DJ		Q'C==="
*4733CI@
DIt';S?'*DIe$7<<##,,-DEE *''))),!#&&&9	 11Cc"""	!!BXb\\)FF 	 	 	BgllnnQ,,,S!!!!   	 "T\4;FC	
			s7   /2E" "G6/A1G! G6!G0-G6/G00G65G6c                     | j                             d          }t          j        |          }| j                             |dz
  t
          j                   	 | j                             d          }|sd S |d         }|dv rd S | j                             d          }t          j        |          }|dk    r/| j                             |dz
            dd          | j        d<   d S | j                             |dz
  t
          j                   )Nr>   Tr   )      d   comment)r   r   r   rH   r1   r2   r3   r   )r   rK   r   markertyps        r   r   zJpeg2KImageFile._parse_comment  s    gll1oos##VaZ---	6W\\!__F )Cl""',,q//C]3''Fd{{'+w||FQJ'?'?'C	)$VaZ555	6r   c                 8    | j         pt                      j        S r!   )r   superreduce)r   	__class__s    r   r   zJpeg2KImageFile.reduce  s    
 |-uww~-r   c                     || _         d S r!   )r   )r   values     r   r   zJpeg2KImageFile.reduce   s    r   c                    | j         r| j        rd| j        z  }|dz	  }t          | j        d         |z   |z            t          | j        d         |z   |z            f| _        | j         d         }|d         d         | j        | j        |d         d         |d         d         f}|d         d| j        z   |d         |fg| _         t          j                            |           S )Nr   r   r@   rF   r   r>   )r   r   intr&   r   r   r   load)r   poweradjusttt3s        r   r   zJpeg2KImageFile.load$  s    9 	? 	?%EaZFTYq\F*e344TYq\F*e344DJ 	!AA$q'4<ad1gqtAwGBA$ 2AaD"=>DI"''---r   )r8   r9   r:   formatformat_descriptionr   r   propertyr   setterr   __classcell__)r   s   @r   rw   rw      s        F02
 2
 2
h6 6 6, . . . . X. ]  ]. . . . . . .r   rw   c                 :    | d d         dk    p| d d         dk    S )NrF   rz   r~   r|   r<   )prefixs    r   _acceptr   5  s/    rr
)) 	B#2#;AAr   c                    | j         }|                    d          s|                    dd          rd}nd}|                    dd           }|                    dd           }|                    dd           }|                    d	d
          }|                    dd           }	|	Ft          |	t          t
          f          rt          d |	D                       sd}
t          |
          |                    dd          }|                    dd           }|                    dd           }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    d          }t          |t                    r|	                                }|                    dd          }d}t          |d          r(	 |                                }n# t          $ r d}Y nw xY w|||||	|||||||||||f| _        t          j        | |dd| j        z   d|fg           d S )N.j2kno_jp2Fr{   r}   offsettile_offset	tile_sizequality_moderatesquality_layersc                 F    g | ]}t          |t          t          f          S r<   )
isinstancer   float).0quality_layers     r   
<listcomp>z_save.<locals>.<listcomp>Q  s6       ! =3,77  r   z,quality_layers must be a sequence of numbersnum_resolutionsr   codeblock_sizeprecinct_sizeirreversibleprogressionLRCPcinema_modenomctsignedr   pltr	   r   r   r   )encoderinfor   getr   listtupleall
ValueErrorstrencodehasattrr   r   encoderconfigr   _saver&   )imr   filenamer   kindr   r   r   r   r   r   r   	cblk_sizer   r   r   r   r   r   r   r   r   s                         r   r   r   @  s   >D   DHHXu$=$= XXh%%F((=$//Kd++I88NG44LXX.55N!>D%=11 " %3  
 
 " =oohh0!44O)400IHH_d33M88NE22L((=&11K((=$//K
((5!

CXXh&&Fhhy!!G'3 #..""
((5%
 
 C	Br8 	BB 	 	 	BBB	 	
!B& OBh(8!TBCDDDDDs   H H)(H))z.jp2r   z.jpcz.jpfz.jpxz.j2cz	image/jp2)r)   r2   r"    r   r   r   r   rZ   ra   ru   rw   r   r   register_openr   register_saveregister_extensionsregister_mimer<   r   r   <module>r      su    
			 				  ' ' ' ' ' ' ' ' ' 'G G G G G G G GT  D9 9 99% 9% 9%@g. g. g. g. g.i) g. g. g.T  AE AE AEP  O*OW E E E  O*E 2 2 2  LLL    O*K 8 8 8 8 8r   