Click here to Skip to main content
Licence 
First Posted 18 May 2005
Views 77,502
Downloads 979
Bookmarked 30 times

GD library wrapper

By Dade Murphy | 18 May 2005
GD library wrapper (for ASP developers with PHP vs ASP examples).
1 vote, 33.3%
1
1 vote, 33.3%
2

3

4
1 vote, 33.3%
5
2.67/5 - 3 votes
μ 2.67, σa 3.64 [?]

Online demo.

(Hit F5 to see a new 'randomized' GIF generated!)

Introduction

This wrapper was developed by Trevor Herselman. GD is copyright 2005 Boutell.com, Inc. GD was developed by Thomas Boutell.

Files:

  • bgd.dll -- GD library binary, downloadable from here. N.B.: Not my work!!!
  • GDLibrary.dll -- ActiveX wrapper DLL, developed in VB6 with full source code! Needs to be registered before use!

VB Source Code

  • GDLibrary.vbp -- Visual Basic 6 project file.
  • gdImage.cls -- Class module file.
  • modGDLibrary.bas -- Standard VB module file, with VB function declarations of the bgb.dll functions.
  • modAPI.bas -- Standard VB module file, declaration of some Windows API functions, e.g. copyMemory.

ASP Examples

  • DynamicGif.asp -- Dynamic GIF example.
  • DynamicPng.asp -- Dynamic true color PNG example.
  • LoadPng.asp -- Example of loading a PNG file.

What is GD Library?

Edited quote from www.boutell.com:

"GD is an open source code library for the dynamic creation of images by programmers. GD creates PNG, JPEG and GIF images, and is commonly used to generate charts, graphics, thumbnails, graphs, text and almost anything on the fly."

FAQ

Why another wrapper?

Actually, it's the first of its kind and the only wrapper available for ASP developers. GD comes standard (built-in) with PHP 4.3.x.

Why use GD?

GD is a very mature and stable project. It's unbelievably fast and easy to use! PHP developers can easily see the similarities and ASP developers will have a smoother transition to PHP by using similar code! Take advantage of tutorials written for PHP with only syntax differences!

Why use this wrapper?

An image can be created/loaded, drawn on, saved to file or sent to a browser in less than 5 lines of code! There are several advantages ASP developers have, such as being able to read/write directly to BLOB or Image types in SQL. This wrapper creates an ADODB.Stream (ADO 2.8) object for internal use and is fully available to the client (object.Stream) with all the features and functionality that the Stream object brings!

What can GD do?

  • Create Palette/True color images
  • GetPixel, SetPixel
  • Draw lines, rectangles, arcs
  • Fill areas to borders
  • Filled arcs, filled ellipses
  • Write horizontal/vertical text

What else can the wrapper do?

Gradient fills (horizontal and vertical), load/save from/to a file, memory or database (using ADO 2.8 Stream object). Output dynamic image directly to client.

Current wrapper limitations?

To draw various fonts, GD uses FreeType library, I'm having problems with the function declarations. I have problems with the declaration of the variable length polygon drawing functions.

Example 1

Create a 500x500 PNG image and draw a blue rectangle.

PHP

<?php
    // Create a blank 500x500 pixel image. 
    $im = imagecreate(500, 500);
    // Allocate $white to the white color in $im. 
    $white = imagecolorallocate($im, 255, 255, 255);
    // Allocate $blue to the blue color in $im. 
    $blue = imagecolorallocate($im, 0, 0, 255);
    // Create a rectangle starting at (3, 15), the upper
    // left corner, that goes down to (390, 440),
    // the lower right corner. 
    imagerectangle($im, 3, 15, 390, 440);
    // Send the PNG content type header
    // so the browser knows what it's getting. 
    header('Content-Type: image/png');
    // Output the image to the browser.
    imagepng($im);
?>

ASP (JavaScript)

<%
    var gdImage = Server.CreateObject("GDLibrary.gdImage");
    gdImage.Create(500, 500);
    gdImage.ColorAllocate(255, 255, 255);
    var Blue = gdImage.ColorAllocate(0, 0, 255);
    gdImage.Rectangle(3, 15, 390, 440, Blue);
    Response.ContentType = "image/png";
    Response.BinaryWrite(gdImage.ToPngStream().Read);
%>

Example 2

Create a 230x20 image and write "My first Program with GD".

PHP

<?php
    header ("Content-type: image/png"); 
    $img_handle = ImageCreate (230, 20) or die ("Cannot Create image"); 
    $back_color = ImageColorAllocate ($img_handle, 0, 10, 10); 
    $txt_color = ImageColorAllocate ($img_handle, 233, 114, 191); 
    ImageString ($img_handle, 31, 5, 5,  
                 "My first Program with GD", $txt_color); 
    ImagePng ($img_handle); 
?>

ASP (JavaScript)

<%
    Response.ContentType = "image/png";
    var gdImage = Server.CreateObject("GDLibrary.gdImage");
    gdImage.Create(230, 20);
    gdImage.ColorAllocate(0, 10, 10);
    var TextColor = gdImage.ColorAllocate(233, 114, 191);
    gdImage.Chars(gdImage.FontGetLarge(), 5, 5, 
                 "My first Program with GD", TextColor);
    Response.BinaryWrite(gdImage.ToPngStream().Read);
%>

Example 3

Draw lines 10 pixels apart in a for loop.

PHP

<?php 
    Header("Content-type: image/png"); 
    $height = 300; 
    $width = 300; 
    $im = ImageCreate($width, $height); 
    $bck = ImageColorAllocate($im, 10,110,100); 
    $white = ImageColorAllocate($im, 255, 255, 255); 
    ImageLine($im, 0, 0, $width, $height, $white); 
    for($i=0;$i<=299;$i=$i+10) { 
    ImageLine($im, 0, $i, $width, $height, $white); }     
    ImagePNG($im); 
?>

ASP (JavaScript)

<%
    Response.ContentType = "image/png";
    var height = 300;
    var width = 300;
    var gdImage = Server.CreateObject("GDLibrary.gdImage");
    gdImage.Create(width, height);
    gdImage.ColorAllocate(10, 110, 100);
    var white = gdImage.ColorAllocate(255, 255, 255);
    gdImage.Line(0, 0, width, height, white);
    for (var i = 0; i < width; i += 10)
        gdImage.Line(0, i, width, height, white);
    Response.BinaryWrite(gdImage.ToPngStream().Read);
%>

Example 4

Draw an ellipse (oval)

PHP

<?php 
    Header("Content-type: image/png"); 
    $height = 300; 
    $width = 300; 
    $im = ImageCreate($width, $height); 
    $bck = ImageColorAllocate($im, 10,110,100); 
    $white = ImageColorAllocate($im, 255, 255, 255); 
    imageellipse ($im, 150, 150, 100, 200, $white); 
    ImagePNG($im); 
?>

ASP (JavaScript)

<%
    Response.ContentType = "image/png";
    var height = 300;
    var width = 300;
    var gdImage = Server.CreateObject("GDLibrary.gdImage");
    gdImage.Create(width, height);
    gdImage.ColorAllocate(10, 110, 100);
    var white = gdImage.ColorAllocate(255, 255, 255);
    gdImage.Ellipse(150, 150, 100, 200, white);
    Response.BinaryWrite(gdImage.ToPngStream().Read);
%>

Example 5

Load a PNG from file, if the file is not found, create a new image with the message "Image Not Found".

PHP

<? 
    header ("Content-type: image/png"); 
    $im = @ImageCreateFromPNG ("php.png"); 
    if(!$im) { 
        $img_handle = ImageCreate (200, 20) or die ("Cannot Create image"); 
        $back_color = ImageColorAllocate ($img_handle, 0, 0, 0); 
        $txt_color = ImageColorAllocate ($img_handle, 255, 255, 255); 
        ImageString ($img_handle, 10, 25, 5,  "Image Not Found", $txt_color); 
        ImagePng ($img_handle); } 
    Else { 
        echo "Image is Found"; } 
?>

ASP (JavaScript)

<%
    Response.ContentType = "image/png";
    var gdImage = Server.CreateObject("GDLibrary.gdImage");
    if (!gdImage.LoadFromFile(Server.MapPath("dynamicpng.png"))) {
        gdImage.Create(200, 20);
        gdImage.ColorAllocate(0, 0, 0);
        var TextColor = gdImage.ColorAllocate(255, 255, 255);
        gdImage.Chars(gdImage.FontGetMediumBold(), 25, 5, 
                              "Image Not Found", TextColor);
        Response.BinaryWrite(gdImage.ToPngStream().Read); }
    else {
        Response.Write("Image is Found"); }
%>

This wrapper was developed by Trevor Herselman. GD is copyright 2005 Boutell.com, Inc. GD was developed by Thomas Boutell.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Dade Murphy

Web Developer

South Africa South Africa

Member
Professional award winning developer. He has been programming for over 14 years. With professional experience in C/C++ (Borland & Microsoft), Assembler (IA-32), VB6, ASP and SQL among others.
 
His programming interests include cryptography (AES, SSL, SHA etc.), compression algorithms (LZW etc.), AI (Genetic algorithms, Path finding and Neural Networks), WinSock, assembler (or lowest level development) and performance programming.
 
He is currently the Webmaster and senior developer for a multi-million dollar IT group.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionCan I use the Korean fonts? PinmemberMember 835246223:07 26 Oct '11  
Generalnew function resize e resample Pinmembergiaza8:28 8 Oct '09  
GeneralHi Dade PinmemberDaKhucBuon0:15 20 Jul '09  
Generalresize image and use jpg PinmemberAtlantis7812:08 8 Apr '07  
QuestionTransparency, how do you do it? Pinmemberwvankuyk9:51 18 Dec '06  
QuestionHow to set this up? Pinmembersp@k11:50 3 Nov '06  
QuestionFonts Pinmemberjigas5:05 13 Sep '06  
GeneralDetecting how many frames in GIF animation Pinmemberrbalboa8:12 11 Sep '06  
Questiongdwrapper - Write file to disk Pinmemberjkirkerx12:18 4 Jun '06  
GeneralFile not found Pinmemberkenzoj3:19 18 Apr '06  
GeneralRe: File not found Pinmemberpetapetes6:03 3 May '06  
GeneralRe: File not found PinmemberJohnSmith3kk48du12:33 23 Sep '06  
GeneralImageresizing Pinmemberxayide23:28 12 Apr '06  
It seems the wrapper has problems with Imageresizing to.
GeneralTTF(FT) not support,not support for chinese etc Pinmemberjiangjiayun18:17 5 Sep '05  
GeneralAnother gd wrapper (VBScript) PinmemberLutz Tautenhahn11:12 9 Jun '05  
GeneralRe: Another gd wrapper (VBScript) PinmemberDade Murphy21:07 9 Jun '05  
GeneralASP Captcha PinsussCSShyamSundar22:17 3 Jun '05  
GeneralCannot work Pinmemberdonno2021:46 28 May '05  
GeneralRe: Cannot work PinmemberDade Murphy21:11 29 May '05  
Generalgreat work! Pinmemberfrumbert14:15 24 May '05  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120210.1 | Last Updated 18 May 2005
Article Copyright 2005 by Dade Murphy
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid