
    h5jt"                    ,   d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZ erd dlmZ  G d de      Zeez  Zeez  Zdd	Z	 d	 	 	 	 	 	 	 	 	 dd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)    )annotationsN)Callable)TYPE_CHECKINGAny
NamedTuple)_unpack_subbyte_2bit_unpack_subbyte_4bitImagec                      e Zd ZdZy)ImageDecompressionErrorzImage decompression error.N)__name__
__module____qualname____doc__     Q/var/www/html/qr/venv/lib/python3.12/site-packages/pikepdf/models/_transcoding.pyr   r      s    $r   r   c                >    t        | |      \  }}|dkD  r|dz  }||z  S )zReturn the multiple of k that is greater than or equal n.

    >>> _next_multiple(101, 4)
    104
    >>> _next_multiple(100, 4)
    100
    r      )divmod)nkdivmods       r   _next_multipler      s,     a|HC
Qwq7Nr   c                   |\  }}d|z  }t        ||      }t        ||z  |z        }t        |      |z  }	|dk(  rdd|z  dz
  z  }|dk(  rt        | d|	 ||       n!|dk(  rt	        | d|	 ||       nt        |      t        |      |fS )aw  Unpack subbyte *bits* pixels into full bytes and rescale.

    When scale is 0, the appropriate scale is calculated.
    e.g. for 2-bit, the scale is adjusted so that
        0b00 = 0.00 = 0x00
        0b01 = 0.33 = 0x55
        0b10 = 0.66 = 0xaa
        0b11 = 1.00 = 0xff
    When scale is 1, no scaling is applied, appropriate when
    the bytes are palette indexes.
       r         r      N)r   	bytearraylen_4bit_inner_loop_2bit_inner_loopNotImplementedError
memoryview)
packedsizebitsscalewidthheightbits_per_bytestridebuffermax_reads
             r   unpack_subbyte_pixelsr2   %   s     ME6IME=1F}v-67F6{m+Hz DA&qy	*FE:		*FE: "$''fv%%r   c                    t        | ||       y)z`Unpack 2-bit values to their 8-bit equivalents.

    Thus *out* must be 4x at long as *in*.
    N)r   in_outr+   s      r   r%   r%   W       
 c5)r   c                    t        | ||       y)z`Unpack 4-bit values to their 8-bit equivalents.

    Thus *out* must be 2x at long as *in*.
    N)r	   r4   s      r   r$   r$   _   r7   r   c           
     0   ddl m} d}	  |j                  d|| dd||      S # t        $ rj}dt	        |      v rM	  |j                  d|| dd|d   dz   dz  |      cY d	}~S # t        $ r}t        t	        |            |d	}~ww xY wt               |d	}~ww xY w)
zUse Pillow to create one-component image from a byte buffer.

    *stride* is the number of bytes per row, and is essential for packed bits
    with odd image widths.
    r   r
   r   Lrawzbuffer is not large enough   r!   N)PILr   
frombuffer
ValueErrorstrr   )r0   r)   r/   r   ystepee2s          r   image_from_byte_bufferrD   g   s     E3uT65#vuMM 3'3q61?'u''vucDGaKA3Eu   ?-c"g6B>? *+23s7   " 	BB AB	B(A==BBBc                <    d}| D ]  }|t        |g      dz  z  } |S )Nr   r<   )bytes)gray_palettepaletteentrys      r   _make_rgb_paletterJ      s0    G &5%>A%%&Nr   c                    t        |       5 }t        dt        |      z        }t        |      D ]  \  }}|d|z  d|dz   z   |d|z  d|dz   z   ! 	 d d d        |S # 1 sw Y   S xY w)Nr!   r   )r'   r"   r#   	enumerate)r0   rH   mvoutputr   pal_idxs         r   _depalettize_cmykrP      s    	F	 Sr1s2w;'#B- 	SJAw*1!g+Wq[@Q*RF1q51A;'	SS M	S Ms   AAA&c                .   |dk(  r"t        | ||      }|j                  ||       |S |dk(  r-t        |      }t        | ||      }|j                  |d       |S |dk(  r*ddlm} t        | |      } |j                  d||d      }|S t        d	|       )
zConstruct an image from a byte buffer and apply the palette.

    1/2/4-bit images must be unpacked (no scaling!) to byte buffers first, such
    that every 8-bit integer is an index into the palette.
    RGBrawmoder:   CMYKr   r
   r;   )datadecoder_namezpalette with )rD   
putpaletterJ   r=   r   rP   r>   r&   )	r0   r)   r/   	base_moderH   imrG   r   rN   s	            r   image_from_buffer_and_paletter[      s     E#FD&9
gy1 I 
c	 )1#FD&9
lE2 I 
f	 #673UfdeL I "M)"=>>r   c                f   | j                  d      } |dk(  r=t        |      dk(  r/dj                  |dd d|dd g      }| j                  |d       | S |d	k(  r	 | j                  |d	       | S | S # t        $ r6}d
t        |      v rt        |      }| j                  |d       Y d}~| S d}~ww xY w)zApply palettes to 1-bit images.PrR      r   r   r<   s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rS   r:   zunrecognized raw modeN)convertr#   joinrX   r?   r@   rJ   )rZ   rY   rH   expanded_paletterB   rgb_palettes         r   fix_1bit_palette_imagerc      s     
CBEc'la/88Qq\7'!A,G
 	&6 I 
c		:MM'3M/
 I2I	  	:&#a&0/8k59I		:s   A1 1	B0:+B++B0c          	        dddl m j                         D ci c]  \  }}|j                  | c}}d G d dt              g dfd}ddfd	}	d
| \  }
} |	d|
        |	d|        |	dd        |	d|        |	dd       |	 |	d|        |	d|        |	dfd        |	d|        |	d|       d|r |	dfdt        |              |t                    t        |      z   D cg c]  }|D ]  }t        |      r |       n|  }}}t        j                  dd
 t              z  z   dz   dddt              g|d }|r||z  }|S c c}}w c c}}w ) z=Generate binary CCITT header for image with given parameters.z<2sHLHr   )TAGS_V2z<HHLLc                  6    e Zd ZU ded<   ded<   ded<   ded<   y)	"generate_ccitt_header.<locals>.IFDintkeyr   typecodecount_int | Callable[[], int | None]rV   N)r   r   r   __annotations__r   r   r   IFDrg      s    ,,r   rn   c                f    t        j                        t        j                        | z  z   dz   S )Nr!   )structcalcsize)	ifd_count
ifd_structtiff_header_structs    r   header_lengthz,generate_ccitt_header.<locals>.header_length   s3    OO./ooj)I56	
r   r   c                b    |    }|   j                   }j                   ||||             y N)typeappend)	tag_namerV   countri   rj   rn   	TIFF_TAGSifdstag_keyss	        r   add_ifdz&generate_ccitt_header.<locals>.add_ifd   s3    x S>&&CXud34r   N
ImageWidthImageLengthBitsPerSampleCompression	FillOrder	T4OptionsPhotometricInterpretationStripOffsetsc                      S rw   r   )image_offsets   r   <lambda>z'generate_ccitt_header.<locals>.<lambda>   s    L r   RowsPerStripStripByteCounts
ICCProfilec                      S rw   r   )
icc_offsets   r   r   z'generate_ccitt_header.<locals>.<lambda>   s    j r   )r{   r:   s   II*   r   )returnrh   )r   )rz   r@   rV   rl   r{   rh   )	PIL.TiffTagsre   itemsnamer   r#   callablerp   pack)r)   data_lengthccitt_group
t4_options
photometryiccri   tagru   r   r,   r-   ifdargifd_argstiff_headerrn   r|   r   rs   r}   r   r~   rt   s                   @@@@@@@@r   generate_ccitt_headerr      s    61.7oo.?@(#s#@HJ-j - D
5 5 LME6L% M6"OQM;'KZ('4N01NF#{+J
0CAs4y)JC(L=AQcSQc(3-S0Q0QHQ++	jns4y8	83	>
	D	 
 	
K su AZ Rs   E0"E6)r   rh   r   rh   r   rh   )r   )
r(   	BytesLiker)   tuple[int, int]r*   rh   r+   rh   r   ztuple[BytesLike, int])r5   r   r6   MutableBytesLiker+   rh   r   None)r0   r   r)   r   r/   rh   )rG   r   r   rF   )r0   r   rH   r   )r0   r   r)   r   r/   rh   rY   r@   rH   r   r   Image.Image)rZ   r   rY   r@   rH   r   r   r   )r)   r   r   rh   r   rh   r   z
int | Noner   rh   r   rF   r   rF   )
__future__r   rp   collections.abcr   typingr   r   r   pikepdf._corer   r	   r=   r   	Exceptionr   rF   r'   r   r"   r   r   r2   r%   r$   rD   rJ   rP   r[   rc   r   r   r   r   <module>r      sI   #  $ 1 1 D%i % J	z)  GH&&,&47&@C&&d**38
  	
  @ #.7*G
G G 	G
 G G 
G Gr   