
    Kwg                         d Z dZddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZ dd	lmZ  G d
 d      Zedk(  rej"                  j%                  ej"                  j'                  ej(                        dd      Zej"                  j-                  e      sJ d       de_         eedd      Z ej2                         Z edej8                          eej;                  e             yy)z3.3.0z@
Image functionality sliced out of canvas.py for generalization
    N)	rl_config)pdfutils)pdfdoc)isStr)fp_strasciiBase85Encode)aspectRatioFixc                   P    e Zd ZdZddZd Zd Zd Zd Zd Z	dd	Z
	 	 dd
Zd Zy)PDFImagezWrapper around different "image sources".  You can make images
    from a PIL Image object, a filename (in which case it uses PIL),
    an image we previously cached (optimisation, hardly used these
    days) or a JPEG (which PDF supports natively).Nc                     || _         || _        || _        || _        || _        d | _        || _        d| _        d| _        g | _	        d | _
        | j                          y )N	DeviceRGB   )imagexywidthheightfilenameimageCaching
colorSpacebitsPerComponentfilterssourcegetImageData)selfr   r   r   r   r   cachings          Q/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/pdfgen/pdfimages.py__init__zPDFImage.__init__   s_    

# & !    c                     t        | j                  d      }	 | j                  |      }|j                          |S # |j                          w xY w)Nrb)openr   _jpg_imagedataclose)r   fpresults      r   jpg_imagedatazPDFImage.jpg_imagedata*   sD     $**d#	((,FHHJ HHJs	   ; Ac                    t        j                  |      }d| _        |d   |d   }}|d   dk(  rd}n|d   dk(  rd}nd}|j                  d       g }|j	                  d	|||t
        j                  xr d
xs dfz         |j                         }t
        j                  rt        |      }t        j                  ||       |j	                  d       |||fS )NJPEGr         
DeviceGray   r   
DeviceCMYKz,BI /W %d /H %d /BPC 8 /CS /%s /F [%s/DCT] ID/A85  EI)
r   readJPEGInfor   seekappendr   useA85readr   _chunker)r   	imageFileinfoimgwidth	imgheightr   	imagedatadatas           r   r#   zPDFImage._jpg_imagedata4   s    $$Y/"1gtAw)7a<%J!W\$J%Jq	G8U^`jlul|l|  mI  BI  mO  MO  KP  P  	Q~~$T*D$y)8Y//r   c                 b   | j                   }t        j                  |      st        j                  |       t        j
                  j                  |      d   t        j                  xr dxs dz   }t        |d      j                         }t        t        t        j                  |            }|S )Nr   z.a85z.binr!   )r   r   cachedImageExistscacheImageFileospathsplitextr   r5   r"   	readlineslistmapstrstrip)r   r   
cachednamer<   s       r   cache_imagedatazPDFImage.cache_imagedataJ   s    

))%0##E* WW%%e,Q/93C3C3N3XRXY
D)335	SYY	23	r   c                    dd l }| j                  }|j                  dk(  r.|j                  }|j	                  d       | j                  |      S d| _        d}|j                  dk(  r|}d}d}nC|j                  dk(  r	|}d	}d
}d
}n+|j                  dk(  r|}d	}d
}n|j                  d      }d}d}|j                  \  }}	d||	||t        j                  xr dxs dfz  g}
 t        |d      r|j                  n|j                         }||z  |z  dz   dz	  }t        |      ||	z  k(  sJ d       |j!                  |      }t        j                  rt#        |      }t%        j&                  ||
       |
j)                  d       |
||	fS )Nr   r)   PILr   CMYKr.      1r,   r*   LRGBr-   z,BI /W %d /H %d /BPC %d /CS /%s /F [%s/Fl] IDr/   r0   tobytes   zWrong amount of data for imager1   )zlibr   formatr%   r3   r#   r   modeconvertsizer   r5   hasattrrR   tostringlencompressr   r   r7   r4   )r   rT   r   r%   bpcmyimager   bppr:   r;   r<   raw	rowstrider=   s                 r   PIL_imagedatazPDFImage.PIL_imagedataV   s   

<<xxBGGAJ&&r**::G%JCZZ3G%JCCZZ3G%JCmmE*GJC%ll) BXyZ]_iktk{k{  lH  AH  lN  LN  EO  O  P	 S'')"<w'BRBRUc\#%a'!+	3x9Y..P0PP.}}S!$T*D$y)8Y//r   c                     | j                   st        j                  |d      }n| j                         }|d   j	                         }t        |d         }t        |d         }|||fS )Nr*   )returnInMemoryr-   )r   r   r@   rJ   splitint)r   r   r<   wordsr:   r;   s         r   non_jpg_imagedatazPDFImage.non_jpg_imagedata   sd       //QGI,,.I!""$uQx=aM	(I--r   c                    | j                   }t        |      rW|| _        t        j                  j                  |      d   dv r	 | j                         \  }}}n*| j                  |      \  }}}n| j                         \  }}}|| _	        || _
        || _        | j                  xs || _        | j                  xs || _        y#  | j                  |      \  }}}Y YxY w)z1Gets data, height, width - whatever type of imager*   )z.jpgz.JPGz.jpegz.JPEGN)r   r   r   rA   rB   rC   r'   rh   rb   	imageDatar:   r;   r   r   )r   preserveAspectRatior   r<   r:   r;   s         r   r   zPDFImage.getImageData   s    

<!DMww&q)-OOS595G5G5I2Ix 261G1G1N.	8Y-1-?-?-A*Ix" "ZZ+8
kk.YS595K5KE5R2Ixs   C Cc                    | j                   }| j                  }|dk  s|dk  ryt        ||| j                  | j                  ||| j
                  | j                  |	      \  }	}
| _         | _        }|j                  s|
|z   }
|j                  j                  dt        | j                         dt        | j                  |	|
      d       | j                   }| j                  }| j                  D ]  }|j                  j                  |        |j                  j                  d       |r|j                  ||	|
||       |r%|j                         D ]  }t               |   ||<    y)zDraw an Image into the specified rectangle.  If width and
        height are omitted, they are calculated from the image size.
        Also allow file names as well as images.  This allows a
        caching mechanismgư>Fzq z 0 0 z cmQT)r   r   r	   r   r   r:   r;   bottomup_coder4   r   rj   drawBoundarykeysvars)r   canvasrk   anchor
anchorAtXYshowBoundaryextraReturnr   r   r   r   scaledlineks                 r   drawInlineImagezPDFImage.drawInlineImage   sO    

:U-;<OPVW[W]W]^b^d^dejkqrvrr  AE  AO  AO  PZ  .[*!DJt{FAfHtzz0BF4;;XY[\D]^_

NN 	&DLL%	&C Qqv> %%' +!%A+r   c                 Z   t        j                         }d|d<   d|d<   | j                  |d<   | j                  |d<   d|d<   t        j                  | j
                        |d	<   d
j                  | j                  dd       d
z   }t        j                  ||      }|j                  |      S )ztAllow it to be used within pdfdoc framework.  This only
        defines how it is stored, not how it is drawn later.z/XObjectTypez/ImageSubtypeWidthHeightr   BitsPerComponent
ColorSpace
r-   )
dictionarycontent)
r   PDFDictionaryr   r   PDFNamer   joinrj   	PDFStreamrU   )r   documentdictr   strms        r   rU   zPDFImage.format   s     ##%!V"Y

WX#$ #^^DOO<\))DNN1R01D84A{{8$$r   )NNr   )F)FswFFN)__name__
__module____qualname____doc__r   r'   r#   rJ   rb   rh   r   r{   rU    r   r   r   r      s?    6
"0,
,0\./* Y^594%r   r   __main__testzpythonpowered.gifzimage not foundr*   d   zsource=)__version__r   rA   	reportlabr   reportlab.pdfbaser   r   reportlab.lib.utilsr   reportlab.lib.rl_accelr   r   reportlab.lib.boxstuffr	   r   r   rB   r   dirname__file__srcfileisfile
LongFormatimgPDFDocumentdocprintr   rU   r   r   r   <module>r      s    	 
   & $ % < 1w% w%r Zggll	 2 23#G
 77>>'"5$55"F
7C
%C
&


C	)CJJ	#**S/ r   