MivaScript Graphics Functions Not Working 100%

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • chrisb
    Mini Mivite

    • Nov 2010
    • 34

    #1

    MivaScript Graphics Functions Not Working 100%

    Given the following script...

    Code:
    <MIVA STANDARDOUTPUTLEVEL = "" IDENT = "$Id$">
    
    <MvCOMMENT>
      Begin MivaScript file.
    </MvCOMMENT>
    
    
    <MvCOMMENT>Create image data to manipulate</MvCOMMENT>
    <MvASSIGN NAME="g.GDImage" VALUE="{ gdImageCreate( 300, 300 ) }">
    
    
    <MvCOMMENT>Allocate some colors to the image</MvCOMMENT>
    <MvASSIGN NAME="g.GDColors" MEMBER="red" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 0, 0 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="orange" VALUE="{ gdImageColorAllocate( g.GDImage, 255,165,0 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="yellow" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 255, 0 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="green" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 255, 0 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="cyan" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 255, 255 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="blue" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 0, 255 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="purple" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 0, 255 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="brown" VALUE="{ gdImageColorAllocate( g.GDImage, 165, 42, 42 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="white" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 255, 255 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="black" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 0, 0 ) }">
    
    
    <MvCOMMENT>Put shapes in the image</MvCOMMENT>
    <MvASSIGN NAME="g.What1" VALUE="{ gdImageFill( g.GDImage, 50, 50, g.GDColors:black ) }">
    <MvASSIGN NAME="g.What2" VALUE="{ gdImageFilledEllipse( g.GDImage, 50, 50, 50, 50, g.GDColors:green ) }">
    <MvASSIGN NAME="g.What3" VALUE="{ gdImageEllipse( g.GDImage, 50, 50, 50, 50, g.GDColors:white ) }">
    <MvASSIGN NAME="g.What4" VALUE="{ gdImageFilledRectangle( g.GDImage, 225, 25, 275, 75, g.GDColors:red ) }">
    <MvASSIGN NAME="g.What5" VALUE="{ gdImageRectangle( g.GDImage, 225, 25, 275, 75, g.GDColors:white ) }">
    
    
    <MvCOMMENT>
        Polygons - define an array of points first.
        Array should be like this:
            points[1]    = x0
            points[2]    = y0
            points[3]    = x1
            points[4]    = y1
    </MvCOMMENT>
    <MvASSIGN NAME="g.TriangleCoords" INDEX="1" VALUE="0"><MvASSIGN NAME="g.TriangleCoords" INDEX="2" VALUE="0">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="3" VALUE="100"><MvASSIGN NAME="g.TriangleCoords" INDEX="4" VALUE="200">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="5" VALUE="300"><MvASSIGN NAME="g.TriangleCoords" INDEX="6" VALUE="200">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="1" VALUE="0"><MvASSIGN NAME="g.TriangleCoords" INDEX="2" VALUE="0">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="3" VALUE="100"><MvASSIGN NAME="g.TriangleCoords" INDEX="4" VALUE="200">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="5" VALUE="300"><MvASSIGN NAME="g.TriangleCoords" INDEX="6" VALUE="200">
    <MvASSIGN NAME="g.What6" VALUE="{ gdImageFilledPolygon( g.GDImage, g.TriangleCoords, 3, g.GDColors:purple ) }">
    <MvASSIGN NAME="g.What7" VALUE="{ gdImagePolygon( g.GDImage, g.TriangleCoords, 3, g.GDColors:white ) }">
    
    
    <MvASSIGN NAME="g.What3" VALUE="{ miva_output_header( 'Content-Type', 'image/png' ) }">
    <MvEVAL EXPR="{ gdImagePngOutput( g.GDImage ) }">
    ...why am I getting this for output? It seems that the function for an unfilled ellipse and the polygon functions just don't work.

    imagetest.jpg
    Last edited by chrisb; 08-27-12, 05:53 AM.
  • rguisewite
    Lead UI Developer



    • Nov 2011
    • 255

    #2
    Re: MivaScript Graphics Functions Not Working 100%

    Originally posted by chrisb View Post
    Given the following script...

    Code:
    <MIVA STANDARDOUTPUTLEVEL = "" IDENT = "$Id$">
    
    <MvCOMMENT>
      Begin MivaScript file.
    </MvCOMMENT>
    
    
    <MvCOMMENT>Create image data to manipulate</MvCOMMENT>
    <MvASSIGN NAME="g.GDImage" VALUE="{ gdImageCreate( 300, 300 ) }">
    
    
    <MvCOMMENT>Allocate some colors to the image</MvCOMMENT>
    <MvASSIGN NAME="g.GDColors" MEMBER="red" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 0, 0 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="orange" VALUE="{ gdImageColorAllocate( g.GDImage, 255,165,0 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="yellow" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 255, 0 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="green" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 255, 0 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="cyan" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 255, 255 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="blue" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 0, 255 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="purple" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 0, 255 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="brown" VALUE="{ gdImageColorAllocate( g.GDImage, 165, 42, 42 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="white" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 255, 255 ) }">
    <MvASSIGN NAME="g.GDColors" MEMBER="black" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 0, 0 ) }">
    
    
    <MvCOMMENT>Put shapes in the image</MvCOMMENT>
    <MvASSIGN NAME="g.What1" VALUE="{ gdImageFill( g.GDImage, 50, 50, g.GDColors:black ) }">
    <MvASSIGN NAME="g.What2" VALUE="{ gdImageFilledEllipse( g.GDImage, 50, 50, 50, 50, g.GDColors:green ) }">
    <MvASSIGN NAME="g.What3" VALUE="{ gdImageEllipse( g.GDImage, 50, 50, 50, 50, g.GDColors:white ) }">
    <MvASSIGN NAME="g.What4" VALUE="{ gdImageFilledRectangle( g.GDImage, 225, 25, 275, 75, g.GDColors:red ) }">
    <MvASSIGN NAME="g.What5" VALUE="{ gdImageRectangle( g.GDImage, 225, 25, 275, 75, g.GDColors:white ) }">
    
    
    <MvCOMMENT>
        Polygons - define an array of points first.
        Array should be like this:
            points[1]    = x0
            points[2]    = y0
            points[3]    = x1
            points[4]    = y1
    </MvCOMMENT>
    <MvASSIGN NAME="g.TriangleCoords" INDEX="1" VALUE="0"><MvASSIGN NAME="g.TriangleCoords" INDEX="2" VALUE="0">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="3" VALUE="100"><MvASSIGN NAME="g.TriangleCoords" INDEX="4" VALUE="200">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="5" VALUE="300"><MvASSIGN NAME="g.TriangleCoords" INDEX="6" VALUE="200">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="1" VALUE="0"><MvASSIGN NAME="g.TriangleCoords" INDEX="2" VALUE="0">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="3" VALUE="100"><MvASSIGN NAME="g.TriangleCoords" INDEX="4" VALUE="200">
    <MvASSIGN NAME="g.TriangleCoords" INDEX="5" VALUE="300"><MvASSIGN NAME="g.TriangleCoords" INDEX="6" VALUE="200">
    <MvASSIGN NAME="g.What6" VALUE="{ gdImageFilledPolygon( g.GDImage, g.TriangleCoords, 3, g.GDColors:purple ) }">
    <MvASSIGN NAME="g.What7" VALUE="{ gdImagePolygon( g.GDImage, g.TriangleCoords, 3, g.GDColors:white ) }">
    
    
    <MvASSIGN NAME="g.What3" VALUE="{ miva_output_header( 'Content-Type', 'image/png' ) }">
    <MvEVAL EXPR="{ gdImagePngOutput( g.GDImage ) }">
    ...why am I getting this for output? It seems that the function for an unfilled ellipse and the polygon functions just don't work.

    [ATTACH=CONFIG]532[/ATTACH]
    Good afternoon Chris,

    There are a few things in play here. First off, you are correct in your analysis of the gdImageEllipse function not drawing anything. When we first added the gd library to MivaScript, the gdImageEllipse function did not actually exist. Knowing that it one day would, the shell function was added so that when it eventually did get added to the GD image library, it would work without having to modify existing code. With that said, the current "official" GD image library actually does contain this functionality (see https://bitbucket.org/pierrejoye/gd-libgd for the source if you want to compile/use this version). If you install the version your system offers, it will most likely not be the most current/up to date version (mine was not) and thus not contain the function.

    The second issue you mention has to do with the polygon functions. Not sure if you've seen PHP's implementation of these two functions, but they do it the way your current code works: assign an array with each new index either an x point or a y point. MivaScript did not implement this function the same way. It works like so: each index is a point that contains two members - x and y. So, you would do <MvASSIGN NAME = "l.triangle" INDEX = 1 MEMBER = "x" VALUE = 200> <MvASSIGN NAME = "l.triangle" INDEX = 1 MEMBER = "y" VALUE = 100> ... so on and so forth. I modified the code above to account for the changes:

    Code:
    <MIVA STANDARDOUTPUTLEVEL = "" IDENT = "$Id$">
    
    
    <MvCOMMENT>
      Begin MivaScript file.
    </MvCOMMENT>
    
    
    
    
    <MvCOMMENT>Create image data to manipulate</MvCOMMENT>
    <MvASSIGN NAME = "g.GDImage" VALUE = "{ gdImageCreate( 300, 300 ) }">
    
    
    
    
    <MvCOMMENT>Allocate some colors to the image</MvCOMMENT>
    <MvASSIGN NAME = "g.GDColors" MEMBER = "red" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 0, 0 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "orange" VALUE="{ gdImageColorAllocate( g.GDImage, 255,165,0 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "yellow" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 255, 0 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "green" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 255, 0 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "cyan" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 255, 255 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "blue" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 0, 255 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "purple" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 0, 255 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "brown" VALUE="{ gdImageColorAllocate( g.GDImage, 165, 42, 42 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "white" VALUE="{ gdImageColorAllocate( g.GDImage, 255, 255, 255 ) }">
    <MvASSIGN NAME = "g.GDColors" MEMBER = "black" VALUE="{ gdImageColorAllocate( g.GDImage, 0, 0, 0 ) }">
    
    
    
    
    <MvCOMMENT>Put shapes in the image </MvCOMMENT>
    <MvASSIGN NAME = "g.What1" VALUE = "{ gdImageFill( g.GDImage, 50, 50, g.GDColors:black ) }">
    <MvASSIGN NAME = "g.What2" VALUE = "{ gdImageFilledEllipse( g.GDImage, 50, 50, 50, 50, g.GDColors:green ) }">
    <MvASSIGN NAME = "g.What3" VALUE = "{ gdImageEllipse( g.GDImage, 50, 50, 50, 50, g.GDColors:white ) }">        <MvCOMMENT>This will not work if the supplied GD library does not support this function</MvCOMMENT>
    <MvASSIGN NAME = "g.What4" VALUE = "{ gdImageFilledRectangle( g.GDImage, 225, 25, 275, 75, g.GDColors:red ) }">
    <MvASSIGN NAME = "g.What5" VALUE = "{ gdImageRectangle( g.GDImage, 225, 25, 275, 75, g.GDColors:white ) }">
    
    
    
    
    <MvCOMMENT>
        Polygons - define an array of points first.
        Array should be like this:
            points[1]    = x0
            points[2]    = y0
            points[3]    = x1
            points[4]    = y1
    </MvCOMMENT>
    
    
    <MvASSIGN NAME = "g.TriangleCoords" INDEX = "1"    MEMBER = "x"    VALUE = "0">
    <MvASSIGN NAME = "g.TriangleCoords" INDEX = "1"    MEMBER = "y"    VALUE = "0">
    <MvASSIGN NAME = "g.TriangleCoords" INDEX = "2"    MEMBER = "x"    VALUE = "100">
    <MvASSIGN NAME = "g.TriangleCoords" INDEX = "2"    MEMBER = "y"    VALUE = "200">
    <MvASSIGN NAME = "g.TriangleCoords" INDEX = "3"    MEMBER = "x"    VALUE = "300">
    <MvASSIGN NAME = "g.TriangleCoords" INDEX = "3"    MEMBER = "y"    VALUE = "200">
    <MvCOMMENT>Unlike PHP, MivaScript has you set the x and y members for each point's index.</MvCOMMENT>
    
    
    <MvASSIGN NAME = "l.null" VALUE = "{ gdImageFilledPolygon( g.GDImage, g.TriangleCoords, 3, g.GDColors:purple ) }">
    <MvASSIGN NAME = "l.null" VALUE = "{ gdImagePolygon( g.GDImage, g.TriangleCoords, 3, g.GDColors:white ) }">
    
    
    
    
    <MvASSIGN NAME = "l.null" VALUE = "{ miva_output_header( 'Content-Type', 'image/png' ) }">
    <MvEVAL EXPR = "{ gdImagePngOutput( g.GDImage ) }">
    <MvASSIGN NAME = "l.null" VALUE = "{ gdImageDestroy( g.GDImage ) }">
    Ryan Guisewite
    Lead UI Developer / Miva, Inc.
    www.miva.com

    Comment

    Working...
    X