A Scripting Language for Web, Linux and Windows

A Scripting Language for Web, Linux and Windows

Example: Graphics functions

Demonstrates how to create and manipulate images with gd module based on LibGD.

Example 1: Create red PNG image with 100x100 pixel

<?v1

dl 
("gd"); // Load gd module

img imagecreatetruecolor (100100);
red imagecolorallocatealpha (img255,0,0,0);
imagefill (img00red);

// If filename is null then the image will be written to standard output. 
// This is useful to show the image in Web mode.
imagepng(img"red_100x100.png"); 

imagedestroy (img);

?>

Result:

Red PNG image 100x100 pixel

Example 2: Create transparent PNG image and draw a triangle

<?v1

dl 
("gd"); // Load gd module

img imagecreatetruecolor (8060);
black imagecolorallocatealpha (img0,0,0,0);
imagefill (img00black);

// Make background color transparent
imagecolortransparent (imgblack);

// Note: The alpha color 50 (0..127) defines how much the transparent background 
// shines through the color. In this example the transparent background color is 
// black, that means alpha > 0 will make the color darker.
green imagecolorallocatealpha (img0255,050);
red imagecolorallocatealpha (img2550050);
pink imagecolorallocatealpha (img255025550);

// Create a style (brush) with 3 colors
imagesetstyle (img, array (pinkgreenred));

// Set thickness in pixel of drawing functions, 1 = default
imagesetthickness (img10);

// Draw triangle
imageline (img10105050IMG_COLOR_STYLED);
imageline (img50506010red);
imageline (img60101010red);

imagepng(img"transparent_triangle.png"); 

imagedestroy (img);

?>

Result:

Transparent triangle

Example 3: Draw some primitives

<?v1

dl 
("gd"); // Load gd module

img imagecreatetruecolor (300210);
black imagecolorallocatealpha (img0000);
imagefill (img00black);

green imagecolorallocatealpha (img0,25500);
red imagecolorallocatealpha (img255000);
yellow imagecolorallocatealpha (img25525500);

// Set red pixel to 5/5
imagesetpixel (img55red);

// Draw green rectangle fom 10/10 to 100/100
imagerectangle (img1010100100green);

// Draw red circle with center 120/160 and radius 50 pixel
imageellipse (img1201605050red);

// Draw red filled ellipse/oval with center 230/170, width 100, height 50 pixel
imagefilledellipse (img23017010050red);

// Draw green filled arcus from 0 to 300 degree
imagefilledarc (img3016050500300green4);

// Draw red open arcus from 100 to 45 degree
imagearc (img2305510010010045red); 

// Draw yellow filled polygon from position 30/40 to 100/100 to 250/120 
points = array (3040100100250120);
imagefilledpolygon (imgpointscount(points)/2yellow);

imagepng(img"primitives.png"); 

imagedestroy (img);

?>

Result:

Primitives

Example 4: Text with buildin fonts

<?v1

dl 
("gd"); // Load gd module

img imagecreatetruecolor (250115);

green imagecolorallocatealpha (img0,255,0,0);
imagefill (img00green);

black imagecolorallocatealpha (img0,0,0,0);

// LibGD has four buildin fonts with fixed char size
imagestring (img11010utf8_decode ("Tiny, char size ".imagefontwidth(1)."x".imagefontheight(1)), black);
imagestring (img21025utf8_decode ("Small, char size ".imagefontwidth(2)."x".imagefontheight(2)), black);
imagestring (img31045utf8_decode ("Bold, char size ".imagefontwidth(3)."x".imagefontheight(3)), black);
imagestring (img41065utf8_decode ("Big, char size ".imagefontwidth(4)."x".imagefontheight(4)), black);
imagestring (img51087utf8_decode ("Bold, char size ".imagefontwidth(5)."x".imagefontheight(5)), black);

// Draw text from bottom to top
imagestringup (img422090utf8_decode ("My Text up"), black);

imagepng(img"imagetext.png"); 

imagedestroy (img);

?>

Result:

Image text

Example 5: Text with true type front

<?v1

dl 
("gd"); // Load gd module

img imagecreatetruecolor (290190);

green imagecolorallocatealpha (img0,255,0,0);
imagefill (img00green);

black imagecolorallocatealpha (img0,0,0,0);

angle 0.5// Radiant
ttfFilename "Arial.ttf";
fontSize 15;
30;
150;
imagettftext  (imgfontSizeanglexyblackttfFilename
    
utf8_decode ("This true type text is rotated\r\nand can have multiple lines"));

imagepng(img"imagetext_truetype.png"); 

imagedestroy (img);

?>

Result:

Image true type font

Example 6: Load and rotate image

<?v1

dl 
("gd"); // Load gd module

// Load image from file
img imagecreatefromfile ("v1_logo.png");

red imagecolorallocatealpha (img255000);

// Rotate 22.5 degrees to right with red background
img2 imagerotate (img, -25.5red);

imagefile (img"image_rotate.png"); 

?>

Result:

Rotated image

Example 7: Effects on images

<?v1

dl 
("gd"); // Load gd module

// Load image from file
img imagecreatefromfile ("v1_logo.png");

// Set brightsness to darker
imagefilter (imgIMG_FILTER_BRIGHTNESS, -100);

imagefile (img"image_brightness.png"); 

?>

Result:

Darken image

More effects on images see PHP compatible function: image_filter()

Example 8: Crop images

<?v1

dl 
("gd"); // Load gd module

// Load image from file
img imagecreatefromfile ("v1_logo.png");

// Crop image area
img2 imagecrop (img, array ("x"=>15"y"=>20"width"=>80"height"=>75));

imagefile (img2"image_crop.png"); 

?>

Result:

Cropped image

Example 9: Count pixels with specific color

<?v1

dl 
("gd"); // Load gd module

// Load image from file
img imagecreatefromfile ("v1_logo.png");

// Get image dimensions
imagesx (img);
imagesy (img);

blueCnt 0;
for (
x=0;x<w;x++) {
  for (
y=0;y<h;y++) {
    
// Get pixel
    
imagegetpixel (imgxy);   

    if (
p==0x0000FF// Blue
      
blueCnt++;  
  }
}

print (
blueCnt." blue pixels");
?>

Result: 258 blue pixels

Example 10: Video camera example (only for Windows)

<?v1

dl 
("gd"); // Load gd module

// Get a list with all video drivers
drivers videogetalldrivers ();

print_r (drivers); // Dump list

foreach (drivers as => name
{
  
// Create video for driver index
  
video videocreate (i);    

  
// Set own video format
  
if (!videosetformat (video640480)) {
    print (
"Cannot set own video format");  
    
print_r (videogeterror (video));
    break;
  }

  
// Get properties
  
props videogetprops (video);
  if (!
is_array (props)) {
    print (
"Cannot get video properties");
    break;    
  }

  
// Wait some time for intialization
  
sleep (3000);

  
// Save a BMP image
  
videocapturebmp (video"frame.bmp");  

  
// Initialize own capture buffer to save a raw image frame
  
captureBuf "";
  
resize (captureBufprops["size_image"]);

  
videosetcapturebuffer (videomemref (captureBuf), false); // false = no auto conversion to RGB32, we use the raw camera data.

  
if (videograbframe (video)) {
    print (
"Raw frame with ".props["size_image"]." bytes grabbed");    
    
// Save the frame
    
fh fopen ("frame_raw.dat""w+");
    
fwrite (fhcaptureBufprops["size_image"]);
    
fclose (fh);      
  }
  else {
    print (
"videograbframe() failed");
  }

  
// Initialize capture buffer to save a RGB32 frame
  
captureBuf "";
  
resize (captureBufprops["width"]*props["height"]*4);

  
videosetcapturebuffer (videomemref (captureBuf), true); // true = auto conversion to RGB32, Note: Only RGB24, YUY2, MJPEG are converted automatically!

  
if (videograbframe (video)) {
    print (
"RGB32 frame with ".strlen (captureBuf)." bytes grabbed");    
    
// Save the frame
    
fh fopen ("frame_rgb32.dat""w+");
    
fwrite (fhcaptureBuf);
    
fclose (fh);    
  }
  else {
    print (
"videograbframe() failed");
  }

  
// Attach the RGB32 frame to new image object and save it as WebP format
  
img imagetruecolorattachbuffer (memref (captureBuf), props["width"], props["height"], -props["width"]); // -props["width"] means that the image data starts at top/left position    
  
if (img) {
    if (
imagefile (img"frame.webp"))
      print (
"frame.webp saved");
    
imagedestroy (img);
  }
  else {
    
printf ("imagetruecolorattachbuffer () failed");
  }

  
// Dont try the other drivers
  
break;
}

?>

back to Home