Re: How can I call GD's imagepng() directly from my class?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Dec 6, 2010 at 5:26 PM, Daevid Vincent <daevid@xxxxxxxxxx> wrote:

>
> I got a little 'hack' further, but not loving it. Maybe I'll move the image
> to a $_SESSION variable and then have the "gdtest.php" pull it and echo it
> that way....
>

well i think you may be in the right direction, however, id be interested to
see what others on the list think about this particular approach.
 personally, i wouldnt store an image in the session.. but i would certainly
provision a temporary directory inside the webroot where you could put these
images.

perhaps if the images are tied to sessions, throw cleanup in a custom
session cleanup cron, or queue the images for deletion when the user logs
out.  seems to me like the session is an area of abuse in many php apps ive
seen.  even though the standard store is file based, i would still recommend
a separate store for images.


>
>        public function render_image()
>        {
>                $my_img = imagecreate( 200, 80 );
>                $background = imagecolorallocate( $my_img, 0, 0, 255 );
>                $text_colour = imagecolorallocate( $my_img, 255, 255, 0 );
>                $line_colour = imagecolorallocate( $my_img, 128, 255, 0 );
>                imagestring( $my_img, 4, 30, 25, "Test Image", $text_colour
> );
>                imagesetthickness ( $my_img, 5 );
>                imageline( $my_img, 30, 45, 165, 45, $line_colour );
>
>                 ob_start();
>                 header( "Content-type: image/png" );
>                header('Content-Length: ' . strlen($my_img));
>                imagepng( $my_img );
>                 $final_image_data = ob_get_contents();
>                ob_end_clean();
>
>                imagecolordeallocate( $line_color );
>                imagecolordeallocate( $text_color );
>                imagecolordeallocate( $background );
>                imagedestroy( $my_img );
>
>                 echo
> 'data:image/png;base64,'.base64_encode($final_image_data);
>        }
>
> <img src="<?php $my_lopa->render_image(); ?>" width="200" height="80">
>

i dunno, why not just have something a bit simpler, where you generate an
image and store it to disk.  the function could return the path where the
image was saved.  then when the browser loads that resource php doesnt even
fire up, the webserver just sends back the image directly.

not sure on whether you would pass in the location or if you would have
internal logic cook up the path, but im sure you could determine that based
on the rest of the code .. lets suppose your class computes it internally,

something like

<?php
class LOPA
{
  private function get_temp_path()
  {
     // some session specific logic to cook up a temporary path
     // something relative to the web root ...
  }

  public function render_image()
  {
    $my_img = imagecreate( 200, 80 );

    $background = imagecolorallocate( $my_img, 0, 0, 255 );
    $text_colour = imagecolorallocate( $my_img, 255, 255, 0 );
    $line_colour = imagecolorallocate( $my_img, 128, 255, 0 );

    imagestring( $my_img, 4, 30, 25, "Test Image", $text_colour);
    imagesetthickness ( $my_img, 5 );
    imageline( $my_img, 30, 45, 165, 45, $line_colour );

    // now saving to a temp location inside the webroot
    $temp_path = $this->get_temp_path();
    imagepng( $my_img, $temp_path );

    imagecolordeallocate( $line_color );
    imagecolordeallocate( $text_color );
    imagecolordeallocate( $background );
    imagedestroy( $my_img );

    // returning path to temp location
    return $temp_path;
  }
}
?>

<!-- now this just has a path which points right back to an image, served
directly -->
<img src="<?php $my_lopa->render_image(); ?>" width="200" height="80">

-nathan

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux