Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 `”bdpã@sÜdZdZddlTddlmZmZddlmZmZddl m Z ddl m Z dd l mZmZdd lZdd lZdd lmZmZdd lmZmZmZmZydd lmZWn*ek rÊZzedƒ‚WYd d Z[XnXdd„Zdd„Z e j!fdd„Z"ddlm#Z#Gdd„de#ƒZ$dd„Z%dd„Z&dd„Z'd7dd„Z(d Z)Gd!d"„d"ƒZ*d#d$d e j!e j+fd%d&„Z,d#d$d e j!e j+fd'd(„Z-d#d$d e j!e j+fd)d*„Z.d+d#d$d e j!e j+fd,d-„Z/d+d#d$d e j!e j+fd.d/„Z0e/Z1d8d2d3„Z2e3d4k�rØe2d5d6�d S)9z3.3.0a$Render drawing objects in common bitmap formats Usage:: from reportlab.graphics import renderPM renderPM.drawToFile(drawing,filename,fmt='GIF',configPIL={....}) Other functions let you create a PM drawing as string or into a PM buffer. Execute the script to see some test drawings.é)Ú*)Ú getStateDeltaÚrenderScaledDrawing)ÚgetFontÚ unicode2T1)Ú isUnicode)Ú rl_configé)ÚsetFontÚ RenderPMErrorN)ÚBytesIOÚStringIO)ÚsinÚcosÚpiÚceil)Ú _renderPMzÆNo module named _renderPM it may be badly or not installed! You may need to install development tools or seek advice at the users list see https://pairlist2.pair.net/mailman/listinfo/reportlab-usersc Cs2yddlm}Wntk r,ddl}YnX|S)Nr)ÚImage)ÚPILrÚ ImportError)r©rúdtd|jƒ@d>Bdtd|jƒ@BS|S)Néÿéé)ÚintZredZgreenZblue)ÚcrrrÚ Color2Hex)s>rcCs"tƒ}|jt|ƒ||||d�dS)z As it says)Ú showBoundaryN)Ú _PMRendererÚdrawr)ÚdrawingZcanvasÚxÚyrÚRrrrr!/sr!)ÚRendererc@s‚eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z d dd„Z dd„Zdd„Zdd„Zdd„ZdS)!r z³This draws onto a pix map image. It needs to be a class rather than a function, as some image-specific state tracking is needed outside of the state info in the SVG model.cCs|jjƒ|jƒdS)N)Ú_trackerÚpopÚ applyState)Úselfrrrr(:s z_PMRenderer.popcCs t|ƒ}|jj|ƒ|jƒdS)N)rr'Úpushr))r*ÚnodeÚdeltasrrrr+>s z_PMRenderer.pushcCs|jjƒ}|d|j_|d|j_|d}|dk r:||j_|jj|dƒ|d|j_|d|j_|d|j_ |d}|s€d}n.rPr2ÚsvgT)r”ÚpdfrHrH)FrH)r9Z EmptyClipPathÚ _clipPathsZ isClipPathÚdrawPathZ clipPathClearÚreportlab.graphics.shapesr‘rrrtÚcurveTorur†Z clipPathSetÚappendr5r1rvrw) r*r^ryZicpr’r–r�Ústroker2r)r‘rr•r^rršÆsV                     z_PMRenderer.drawPathN)r)Ú__name__Ú __module__Ú __qualname__Ú__doc__r(r+r)rJrKrRrXriror{r}r~rŒršrrrrr 5s  r cCstƒ}|jd|j|jd�S)Nry)ÚditherÚpalette)rrZÚNONEÚADAPTIVE)rhrrrrÚ _convert2pilp÷sr§cCs |jdƒS)NÚL)rZ)rhrrrÚ _convert2pilLûsr©cCs |jdƒS)NÚ1)rZ)rhrrrÚ _convert2pil1þsr«c Cs°t|ƒ}|j\}}tj||t|dƒr*|jn|jƒ|jjƒƒ}t|dƒs¢t t j j |ƒdd|j ƒdƒ�}|j|ƒWdQRXt jdkr¬ddlm}||dd �n |j|ƒdS) Nr\ÚwriterÚ.ÚwbÚmac)Ú markfilenameÚPICT)Úext)r§rdrZpil2pictrcr\rfrhZ getpaletterbr`r^ÚsplitextÚlowerr¬ÚnameÚreportlab.lib.utilsr°) rhÚfnÚfmtÚ transparentÚcolsZrowsrCÚfr°rrrÚ _saveAsPICTs * $  r¼g¯OQ¬á?c@seZdZdddejfdd„ZedBdd „ƒZdCd d „Zd d „Z dDdd„Z dEdd„Z dd„Z dFdd„Z dd„Zdd„ZdGdd„Zdd„Zd d!„Zd"d#„ZdHd%d&„Zd'd(„ZdId*d+„Zd,d-„ZdJd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„ZeZdd?„Z!d@dA„Z"dS)KÚPMCanvaséHiÿÿÿNcCs’|d}t||dƒ}t||dƒ}|j||||ƒ|jd<||jd<|dd|ddf|jd<g|jd<||jd<||jd <||jd <|j|_d S) z-configPIL dict is passed to image save methodgR@gà?Ú_gsÚ_bgrrIr™Ú configPILÚ_dpireN)rÚ _getGStateÚ__dict__rIr.)r*ÚwÚhÚdpiÚbgrÁÚbackendZscalerrrÚ__init__s     zPMCanvas.__init__rÚRGB24cCsp|dkrtj|||d�S|dkr`yddlm}Wntk rLtdƒ‚YqlX|||||d�Sn td|ƒ‚dS) Nr)rÈr[r)ÚGStatez:cannot import rlPyCairo; perhaps it needs to be installed!)r¸z&Invalid backend, %r, given to PMCanvas)rÚgstater[rÌrr )rÅrÆrÈrÉr¸rÌrrrrÃszPMCanvas._getGStatec Csº|dkr|j}|||j_|j_ddddddddœ}|j}|j|j}}x|jƒD]}t||ƒ||<qRW~|`t j |||d�}|j d<x |jƒD]}t ||||ƒq’W|j ||ƒdS)N)r.r/r1r;r<rAr5)rÈr¿)rÀZ_drawingrOrPr¿r6r7Úkeysr†rrÍrÄÚsetattrr ) r*rÅrÆrÈÚAÚgsZfNZfSÚkrrrÚ_drawTimeResize-szPMCanvas._drawTimeResizecCs>tƒjd|jj|jjfd�}t|ddƒp0t|dƒ|jjƒ|S)NrY)rdÚ frombytesÚ fromstring)rÚnewr¿rOrPr†ÚpixBuf)r*rhrrrÚtoPIL;szPMCanvas.toPILcCsˆ|jƒ}|dkrPt|tƒs*tdt|ƒƒ‚tjj|ƒd}|jdƒrP|dd…}|j pXi}|j ddƒ|j dƒ}|r|||ƒ}|j ƒ}|d)kr–t |ƒ}n’|d*krÞ|jd ƒr²t |ƒ}n&|jd ƒrÆt|ƒ}n|jd ƒrØt|ƒ}d}nJ|d+k�rt||||jddƒd�S|d,k�r n|d-k�rd}n td|ƒ‚|dk�rð|jddƒ}|�rÂddlm}m}ddg} x(td.|jƒƒD]\} } d| | | <�qnW|jd|jƒ|j|j| ƒjd ƒjddgdgƒƒfƒ}x,d|jfd/fD]\} } |j| | ƒ|| <�qÒW|j d"dƒ|j d"ƒ�rdd#lm}|j|ƒ}|j d$dƒ|j d$ƒ}|�rB||ƒ}|j||f|Žt |d%ƒ �r„tj!d&k�r„dd'l"m#}|||d(�dS)0Nz*Invalid value '%s' for fn when fmt is Noner r­Ú preConvertCBÚGIFÚTIFFÚTIFFPÚTIFFLÚTIFÚTIFF1ryr¨rªÚPCTr±r¹)r¹ÚPNGÚBMPÚPPMÚJPGÚJPEGzUnknown image kind %sr)Ú ImageChopsriéérZRGBAÚ resolutionúresolution unitÚinchZ chops_invert)ræÚ preSaveCBr¬r¯)r°)r²)rÚ)rÛrÜrÝrÞrß)ràr±)rárârã)rärå)rrçrè)rêrë)$rØr=r_r‹Úasciir`r^r³Ú startswithrÁÚ setdefaultr(Úupperr§Úendswithr©r«r¼Úgetr rrærÚzipZ bitmap_rgbÚmergeÚsplitÚinvertZpointrZrÂÚsavercrµr¶r°)r*r·r¸rhrÁrÙZtcrærÚTÚorÚaÚdrìr°rrrÚ saveToFile@sh                  :       zPMCanvas.saveToFilerÚcCstƒ}|j||d�|jƒS)N)r¸)r rüÚgetvalue)r*r¸rCrrrÚ saveToStringxszPMCanvas.saveToStringc Cs–ddl}|j}|j|j|j}}}|j|jddt|ƒdddd||ddƒ ƒ|d }x0tt|ƒd| ƒD]}|j||||…ƒqjW|jd ƒdS) z¬ Niki Spahiev, , asserts that this is a respectable way to get BMP without PIL f is a file like object to which the BMP is written rNz=2sLLLLLLhh24xÚBMé6é(r ér]úéz) Ústructr¿r×rOrPr¬Úpackr@rs) r*r»rrÑZpixrOrPZrowbrùrrrÚ _saveToBMP}s*zPMCanvas._saveToBMPcCst|j||ƒdS)N)Ú_setFontr¿)r*r6r7Zleadingrrrr ‹szPMCanvas.setFontcCst|j||ƒdS)N)rÏr¿)r*rµÚvaluerrrÚ __setattr__ŽszPMCanvas.__setattr__cCs t|j|ƒS)N)r†r¿)r*rµrrrÚ __getattr__‘szPMCanvas.__getattr__r cCs|r |jƒ|r|jƒdS)N)rvrw)r*ržr�rrrrn”szPMCanvas.fillstrokepathcCs"t||ƒdkst‚tt|dƒ}tt|dƒ}|||} |||} tt|dƒ} tt|dƒ} ||| } ||| }| |}||}t||d}tddt|ƒt|ƒƒ}| ||}| ||}| | }|| }| ||}|||}| | f||f||f| |fffS) a-compute the control points for a bezier arc with theta1-theta0 <= 90. Points are computed for an arc with angle theta increasing in the counter-clockwise (CCW) direction. returns a tuple with starting point and 3 control points of a cubic bezier curve for the curvto opertatoréZg€f@g@g@g@gð?g€v@gUUUUUUõ?)Úabsrprrr)r*rkrlrLrMÚtheta0Útheta1Zcos0Zsin0Úx0Úy0Zcos1Zsin1Úx3Úy3Zdx1Zdy1ZhalfAngrÒrTrUZdx2Zdy2rVrWrrrÚ_bezierArcSegmentCCW˜s(          zPMCanvas._bezierArcSegmentCCWcCsì||}t|ƒdkr ||fg}nXttt|ƒdƒƒ} t|ƒ| } g}x2t| ƒD]&} || | } | | } |j| | fƒqNWg}xb|D]Z\} } |s¶|j||||| | ƒ\\}}}|j|ƒq‚|j||||| | ƒ\\}}}|j|ƒq‚W||f|fS)zÓreturn a set of control points for Bezier approximation to an arc with angle increasing counter clockwise. No requirement on (theta1-theta0) <= 90 However, it must be true that theta1-theta0 > 0.g€V@)r rrÚfloatrsr�r)r*rkrlrLrMrrZ angularExtentZ angleListZNfragZ fragAngleÚiirúÚbÚctrlptsrrZptsZtmpxZtmpyrrrÚ bezierArcCCW»s$     zPMCanvas.bezierArcCCWcCs`|j||||||ƒ\\}}} |j||ƒx2| D]*\\} } \} } \}}|j| | | | ||ƒq.WdS)zÏadds an ellisesoidal arc segment to a path, with an ellipse centered on cx,cy and with radii (major & minor axes) rx and ry. The arc is drawn in the CCW direction. Requires: (ang2-ang1) > 0N)rrtrœ)r*rkrlrLrMZang1Zang2rrrrTrUrVrWrrrrrÚaddEllipsoidalArcÙs zPMCanvas.addEllipsoidalArcrƒcCs|j||||d�dS)N)r�)rŒ)r*r#r$r‡r�rrrÚdrawCentredStringäszPMCanvas.drawCentredStringcCs|j|||dd�dS)Nr‚)r�)rŒ)r*r‡r#r$rrrÚdrawRightStringçszPMCanvas.drawRightStringÚleftcCs|j}|j}|j}|r8|||fkr8|\} } t|| | ƒn|} |} �zÄ|d krœt|| | ƒ} |dkrj|| 8}n2|dkr€|| d8}n|dkrœ|t||| | | ƒ8}|jdkr¸|j|||ƒ�nLt| ƒ} | j rØ|j|||ƒ�n,| } t |ƒ�svy|j dƒ}Wn€t k �rt}zb|j dd…\}}t |j dd…d |j d||d |…|||…|||d …ffŽ‚WYdd}~XnXt|| g| jƒ}t|ƒ}|d }xjt|ƒD]^}||\}}|| k�rÎt||j| ƒ|} |j|||ƒ||k�r¢||j|j |jƒ| ƒ7}�q¢WWd|j||ƒXdS) Nr‚rƒg@r„r[Úutf8r3rFz%s %s-->%s<--%sé r )r‚rƒr‚)r¿r7r6rrˆr‰rerŒrZ _dynamicFontrÚdecodeÚUnicodeDecodeErrorÚargsrZsubstitutionFontsr@rsZencNamer )r*r#r$r‡r…r�rÑZ gs_fontSizeZ gs_fontNamer6r7r�ZfontZfcÚerzÚjZFTÚnZnm1r»ÚtrrrrŒêsR    \   "zPMCanvas.drawStringcCs6|jdk r2|jƒ|j||ƒ|j||ƒ|jƒdS)N)r1rqrrrtrw)r*rTrUrVrWrrrrSs    z PMCanvas.linecCsb|jƒ|j||ƒ|j|||ƒ|j||||ƒ|j|||ƒ|jƒ|j||d�dS)N)ržr�)rqrrrtrurn)r*r#r$rOrPržr�rrrrN#s z PMCanvas.rectc CsÄ|dkr |}|dkr|}||}||}|jƒ|j|||ƒ|j||||||ddƒ|j||||||ddƒ|j||||||ddƒ|j||||||ddƒ|jƒ|jƒdS)zârect(self, x, y, width, height, rx,ry): Draw a rectangle if rx or rx and ry are specified the corners are rounded with ellipsoidal arcs determined by rx and ry (drawn in the counter-clockwise direction)riihr é´N)rqrrrrurn) r*r#r$rOrPrLrMrVrWrrrrQ,szPMCanvas.roundRectcCs|j||||ƒdS)zRadd closed path circle with center cx,cy and axes r: counter-clockwise orientationN)r|)r*rkrlrmrrrrj>szPMCanvas.circlec Cs\|jƒ||}|}|}||}||} ||t} ||t} |} |j||ƒ|j| | | | ||ƒ|}|}||}|}||t} ||} |} ||t} |j| | | | ||ƒ|}|}|}||}||} ||t} ||t} ||} |j| | | | ||ƒ|}|}||}|}||t} ||} ||} ||t} |j| | | | ||ƒ|jƒdS)z…add closed path ellipse with center cx,cy and axes rx,ry: counter-clockwise orientation (remember y-axis increases downward) N)rqÚBEZIER_ARC_MAGICrrrœru) r*rkrlrLrMrrrrrTrUrVrWrrrr|BsN         zPMCanvas.ellipsecCsdS)zdo nothing for compatibilityNr)r*rrrÚ saveState}szPMCanvas.saveStatecCs(t|ƒ|_t|ddƒ}|dk r$||_dS)NrD)rr5r†r4)r*ÚaColorrDrrrrB�s  zPMCanvas.setFillColorcCs(t|ƒ|_t|ddƒ}|dk r$||_dS)NrD)rr1r†r0)r*r*rDrrrr:‡s  zPMCanvas.setStrokeColorcCs ||_dS)N)r;)r*ÚcaprrrÚ setLineCap�szPMCanvas.setLineCapcCs ||_dS)N)r<)r*ÚjoinrrrÚ setLineJoin“szPMCanvas.setLineJoincCs ||_dS)N)r/)r*rOrrrÚ setLineWidth–szPMCanvas.setLineWidth)rrË)N)N)rÚ)N)r r )rƒ)Nr)r r )#rŸr r¡rÚrenderPMBackendrÊÚ staticmethodrÃrÓrØrürþrr r r rnrrrrrrŒrSrNrQrjr|r)rBr:Z restoreStater,r.r/rrrrr½s<  8   #  2 ;r½r¾iÿÿÿcCs6t|ƒ}t|j|j||||d�}t||dd|d�|S)N)rÇrÈrÁrÉr)r)rr½rOrPr!)rûrÇrÈrÁrrÉrrrrÚdrawToPMCanvas™sr2cCst||||||d�jƒS)N)rÇrÈrÁrrÉ)r2rØ)rûrÇrÈrÁrrÉrrrÚ drawToPILŸsr3cCs.tƒ}t||||||d�}|jd|j|jd�S)N)rÇrÈrÁrrÉry)r£r¤)rr3rZr¥r¦)rûrÇrÈrÁrrÉrrhrrrÚ drawToPILP¢sr4rÚc Cs$t||||||d�}|j||ƒdS)zocreate a pixmap and draw drawing, d to it then save as a file configPIL dict is passed to image save method)rÇrÈrÁrrÉN)r2rü) rûr·r¸rÇrÈrÁrrÉrrrrÚ drawToFile§sr5c Cs$tƒ}t|||||||d�|jƒS)N)r¸rÇrÈrÁrÉ)r r5rý)rûr¸rÇrÈrÁrrÉrCrrrÚ drawToString­sr6ÚpmoutFcsÜdd„}ddl}ddlm}ddlm‰|j}g}|jj|ƒsH|j|ƒd}d}|g} i} t j dd…} d d „| Dƒ} | sŽd d d ddddg} n2x| D]} | j | ƒq”Wdj dd „| Dƒƒj dƒ} g‰ddl‰ddlm‰‡‡‡‡‡fdd„}�xB|ttdƒd�D�],\}}}| j|dƒd}| |<|dk�r>|d|d7}| �rR|| k�rR�q|}t|jƒ}t|jƒ}| jd||fƒ�xP| D�]F}|d6k�r¦| jd|jƒƒ�yd|||ƒf}|jj ||ƒ}|jj|ƒ�rà|j |ƒ|dk�r ddlm}t|||d|id�n.|d7k�r,|jddg||d �nt|||d!�|d8k�rT| jd"|ƒn2|dk�rn| jd#|ƒn|dk�r†| jd$|ƒˆ�s–ˆd%k�r¦td&t|ƒƒWn t k �rÈ|||ƒYnX�q„W|j!j"d'd(ƒd)k�rîd|j#d*<x.extr)Ú testshapes)ÚverbosezqrenderPM output results

renderPM results of output

z r cSsg|]}|jdƒr|‘qS)z--ext=)rî)Ú.0rúrrrú Ësztest..Úgifr8ÚpngÚjpgÚpctÚpyr—ú,cSsg|]}|dd…‘qS)éNr)r;rúrrrr<Ñs)ÚescapecsZd||f}ˆsˆdkr t|ƒˆjd|ƒtƒ}ˆj|d�ˆjdˆ|jƒƒƒdS)NzProblem drawing %s fmt=%s filer3z"

%s

)Úfilez
%s
)Úprintr�r Ú print_excrý)rµr¸ÚmsgÚbuf)ÚerrsrDÚshoutÚ tracebackr:rrÚ handleErrorÖs   ztest..handleErrorZ ft_get_face)ZdoTTFz.%02dz%

Drawing %s

%s
z

%s format

z%s.%s)Úwhiter¹)r¸rÁ)ÚformatsÚoutDirÚfnRoot)r¸z
z#python source
zSVG
r3zwrote %sZRL_NOEPSPREVIEWÚ0rªÚpreviewÚepsr˜zz7 (errors)zz pm-index.htmlrÅr¯)r°ZHTML)r²)r=r>r?r@)rAr—)r=r>r?)rTr˜)+r`Úreportlab.graphicsr9Zreportlab.rl_configr:ÚgetAllTestDrawingsr^ÚisdirÚmkdirÚsysÚargvÚremover-rõrLZxml.sax.saxutilsrDrcrrïrrOrPr�rðraZreportlab.lib.colorsrNr5r÷rFríÚAttributeErrorÚenvironròrÄÚreplaceÚextendrbÚ writelinesÚplatformr¶r°)rPrKr²r`r9rVZdrawingsZhtmlTopZ htmlBottomÚhtmlÚnamesrZÚErúrMr"Z docstringrµrzrQrÅrÆrÒÚfilenameÚfullpathrNZ htmlFileNamer»r°r)rJrDrKrLr:rÚtest´sš                           rgÚ__main__T)rK)N)r7F)4Ú __version__r¢r›Zreportlab.graphics.renderbaserrZreportlab.pdfbase.pdfmetricsrrr¶rÚ reportlabrÚutilsr rr r`rYÚior r ÚmathrrrrrUrrZerrMsgrrZ_unset_r!r&r r§r©r«r¼r(r½r0r2r3r4r5r6r÷rgrŸrrrrÚsN    C   `