gd 2.0.33

A graphics library for fast image creation

Follow this link to the latest version of this document.

UPGRADING UNIX USERS: READ THIS FIRST! Modern versions of gd install by default to /usr/local/lib and /usr/local/include. If you already have an older version of gd in /usr/lib and /usr/include, you may wish to use:
./configure --prefix=/usr
To ensure that your new installation overwrites the old.

GIF support has been restored in gd 2.0.28 and above. The well-known patents on LZW compression held by Unisys have expired in all countries. British Telecom and IBM may hold related patents but have never chosen to require royalties for GIF applications, to the best of my knowledge. I am not a lawyer and cannot give legal advice regarding this issue. PNG remains a superior format especially if lossless truecolor images are needed.

When building from soruce, gd 2.0.33 requires that the following libraries also be installed, in order to produce the related image formats. The win32 binary release (bgd) already contains the appropriate libraries. You may skip libraries associated with formats you do not use:

libpng (see the libpng home page), if you want PNG

zlib (see the info-zip home page), if you want PNG

jpeg-6b or later, if desired (see the Independent JPEG Group home page), if you want JPEG

If you want to use the TrueType font support, you must also install the FreeType 2.x library, including the header files. See the Freetype Home Page, or SourceForge. No, I cannot explain why that site is down on a particular day, and no, I can't send you a copy.

If you want to use the Xpm color bitmap loading support, you must also have the X Window System and the Xpm library installed (Xpm is often included in modern X distributions). Most of the time you won't need Xpm.

Please read the documentation and install the required libraries. Do not send email asking why png.h is not found. Do not send email asking why libgd.so is not found, either. See the requirements section for more information. Thank you!

Table of Contents

Up to the Boutell.Com, Inc. Home Page

Credits and license terms

In order to resolve any possible confusion regarding the authorship of gd, the following copyright statement covers all of the authors who have required such a statement. If you are aware of any oversights in this copyright notice, please contact Thomas Boutell who will be pleased to correct them.

COPYRIGHT STATEMENT FOLLOWS THIS LINE
Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by the National Institutes of Health.

Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 by Boutell.Com, Inc.

Portions relating to GD2 format copyright 1999, 2000, 2001, 2002, 2003, 2004 Philip Warner.

Portions relating to PNG copyright 1999, 2000, 2001, 2002, 2003, 2004 Greg Roelofs.

Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002, 2003, 2004 John Ellson (ellson@graphviz.org).

Portions relating to gdft.c copyright 2001, 2002, 2003, 2004 John Ellson (ellson@graphviz.org).

Portions relating to JPEG and to color quantization copyright 2000, 2001, 2002, 2003, 2004, Doug Becker and copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Thomas G. Lane. This software is based in part on the work of the Independent JPEG Group. See the file README-JPEG.TXT for more information.

Portions relating to GIF compression copyright 1989 by Jef Poskanzer and David Rowley, with modifications for thread safety by Thomas Boutell.

Portions relating to GIF decompression copyright 1990, 1991, 1993 by David Koblas, with modifications for thread safety by Thomas Boutell.

Portions relating to WBMP copyright 2000, 2001, 2002, 2003, 2004 Maurice Szmurlo and Johan Van den Brande.

Portions relating to GIF animations copyright 2004 Jaakko Hyvätti (jaakko.hyvatti@iki.fi)

Permission has been granted to copy, distribute and modify gd in any context without fee, including a commercial application, provided that this notice is present in user-accessible supporting documentation.

This does not affect your ownership of the derived work itself, and the intent is to assure proper credit for the authors of gd, not to interfere with your productive use of gd. If you have questions, ask. "Derived works" includes all programs that utilize the library. Credit must be given in user-accessible documentation.

This software is provided "AS IS." The copyright holders disclaim all warranties, either express or implied, including but not limited to implied warranties of merchantability and fitness for a particular purpose, with respect to this code and accompanying documentation.

Although their code does not appear in the current release, the authors also wish to thank Hutchison Avenue Software Corporation for their prior contributions.

END OF COPYRIGHT STATEMENT

What is gd?

gd is a graphics library. It allows your code to quickly draw images complete with lines, arcs, text, multiple colors, cut and paste from other images, and flood fills, and write out the result as a PNG or JPEG file. This is particularly useful in World Wide Web applications, where PNG and JPEG are two of the formats accepted for inline images by most browsers.

gd is not a paint program. If you are looking for a paint program, you are looking in the wrong place. If you are not a programmer, you are looking in the wrong place, unless you are installing a required library in order to run an application.

gd does not provide for every possible desirable graphics operation. It is not necessary or desirable for gd to become a kitchen-sink graphics package, but version 2.0 does include most frequently requested features, including both truecolor and palette images, resampling (smooth resizing of truecolor images) and so forth.

What if I want to use another programming language?

Not all of these tools are necessarily up to date and fully compatible with 2.0.33.

PHP

A variant of gd 2.x is included in PHP 4.3.0. It is also possible to patch PHP 4.2.3 for use with gd 2.0.33; see the gd home page for a link to that information. It would be a Good Idea to merge all of the things that are better in mainstream gd and all of the things that are better in PHP gd at some point in the near future.

Perl

gd can also be used from Perl, courtesy of Lincoln Stein's GD.pm library, which uses gd as the basis for a set of Perl 5.x classes. Highly recommended.

OCaml

gd can be used from OCaml, thanks to Matt Gushee's GD4O project.

Tcl

gd can be used from Tcl with John Ellson's Gdtclft dynamically loaded extension package.

Pascal

Pascal enthusiasts should look into the freepascal project, a free Pascal compiler that includes gd support.

REXX

A gd interface for the REXX language is available.

Any Language

The "fly" interpreter performs gd operations specified in a text file. You can output the desired commands to a simple text file from whatever scripting language you prefer to use, then invoke the interpreter.

What's new in version 2.0.33?

Version 2.0.33 restores compatibility with older releases of Freetype 2.x in addition to the latest release. Thanks to John Ellson and the graphviz project.

What's new in version 2.0.32?

Version 2.0.32 restores correct detection of Unicode character sets for freetype fonts, which repairs a bug that prevented umlauts from displaying properly. Thanks to John Ellson and the graphviz project. Also, version 2.0.32 builds all test programs smoothly in the absence of libpng.

What's new in version 2.0.31?

A minor type naming conflict prevented bgd.dll from compiling, and it was left out of the distribution as a result. This has been corrected.

What's new in version 2.0.30?

2.0.29 did not compile correctly when freetype was not available. This has been corrected. Thanks to Alessandro Ranellucci.

What's new in version 2.0.29?

What's new in version 2.0.28?

What's new in version 2.0.27?

What's new in version 2.0.26?

The following enhancements and fixes:

What's new in version 2.0.25?

Owing to an oversight while making changes to better accommodate the use of gd as a DLL, the extern qualifier was dropped from the declarations of font pointers in 2.0.24. This has been corrected. Thanks to Richard ("OpenMacNews").

What's new in version 2.0.24?

Windows DLL now uses __stdcall calling convention. Existing applications will require a recompile, using the new version of gd.h, in order to use this version of the DLL. However, Visual BASIC and other non-C programmers will now be able to use the DLL, which is an enormous benefit and justifies the one-time inconvenience to existing DLL users.

The elaborate #ifdef test for older versions of Freetype without FT_ENCODING_MS_SYMBOL was needed in a second place also. Thanks to David R. Morrison.

An off-by-one error in gdImageToPalette caused transparency to be applied to the wrong pixels. Thanks to "Super Pikeman."

What's new in version 2.0.23?

Output dpi specification option added to the gdFTStringExtra structure, thanks to Mark Shackelford. See gdImageStringFTEx.

What's new in version 2.0.22?

What's new in version 2.0.21?

What's new in version 2.0.20?

What's new in version 2.0.19?

What's new in version 2.0.18?

What's new in version 2.0.17?

Minor compilation and packaging problems with 2.0.16 were corrected. If 2.0.16 compiled without errors for you, then you don't need to upgrade to 2.0.17.

What's new in version 2.0.16?

What's new in version 2.0.15?

What's new in version 2.0.14?

What's new in version 2.0.13?

What's new in version 2.0.12?

What's new in version 2.0.11?

What's new in version 2.0.10?

What's new in version 2.0.9?

What's new in version 2.0.8?

What's new in version 2.0.7?

Version 2.0.7 corrects a problem which caused 'configure' to complain that the directory NONE was not found, in various places, causing the configuration process to stop. There are no code changes.

What's new in version 2.0.6?

What's new in version 2.0.5?

What's new in version 2.0.4?

The following contributions from John Ellson: And the following additional fixes:

What's new in version 2.0.3?

What's new in version 2.0.2?

What's new in version 2.0.1?

What's new in version 2.0?

What's new in version 1.8.4?

What's new in version 1.8.3?

What's new in version 1.8.2?

What's new in version 1.8.1?

What's new in version 1.8?

Additional JPEG Information

Support for reading and writing JPEG-format images is courtesy of Doug Becker and the Independent JPEG Group / Thomas G. Lane. You can get the latest version of the IJG JPEG software from ftp://ftp.uu.net/graphics/jpeg/ (e.g., the jpegsrc.v6b.tar.gz file). You must use version 6b or later of the IJG JPEG software. You might also consult the JPEG FAQ at http://www.faqs.org/faqs/jpeg-faq/.

What's new in version 1.7.3?

Another attempt at Makefile fixes to permit linking with all libraries required on platforms with order- dependent linkers. Perhaps it will work this time.

What's new in version 1.7.2?

An uninitialized-pointer bug in gdtestttf.c was corrected. This bug caused crashes at the end of each call to gdImageStringTTF on some platforms. Thanks to Wolfgang Haefelinger.

Documentation fixes. Thanks to Dohn Arms.

Makefile fixes to permit linking with all libraries required on platforms with order- dependent linkers.

What's new in version 1.7.1?

A minor buglet in the Makefile was corrected, as well as an inaccurate error message in gdtestttf.c. Thanks to Masahito Yamaga.

What's new in version 1.7?

Version 1.7 contains the following changes:

What's new in version 1.6.3?

Version 1.6.3 corrects a memory leak in gd_png.c. This leak caused a significant amount of memory to be allocated and not freed when writing a PNG image.

What's new in version 1.6.2?

Version 1.6.2 from John Ellson adds two new functions:

Also in this release the build process has been converted to GNU autoconf/automake/libtool conventions so that both (or either) static and shared libraries can be built.

What's new in version 1.6.1?

Version 1.6.1 incorporates superior PNG reading and writing code from Greg Roelofs, with minor modifications by Tom Boutell. Specifically, I altered his code to read non-palette images (converting them to palette images badly, by dithering them), and to tolerate palette images with types of transparency that gd doesn't actually support (it just ignores the advanced transparency features). Any bugs in this area are therefore my fault, not Greg's.

Unlike gd 1.6, users should have no trouble linking with gd 1.6.1 if they follow the instructions and install all of the pieces. However, If you get undefined symbol errors, be sure to check for older versions of libpng in your library directories!

What's new in version 1.6?

Version 1.6 features the following changes:

Support for 8-bit palette PNG images has been added. Support for GIF has been removed. This step was taken to completely avoid the legal controversy regarding the LZW compression algorithm used in GIF. Unisys holds a patent which is relevant to LZW compression. PNG is a superior image format in any case. Now that PNG is supported by both Microsoft Internet Explorer and Netscape (in their recent releases), we highly recommend that GD users upgrade in order to get well-compressed images in a format which is legally unemcumbered.

What's new in version 1.5?

Version 1.5 featured the following changes:
New GD2 format
An improvement over the GD format, the GD2 format uses the zlib compression library to compress the image in chunks. This results in file sizes comparable to GIFs, with the ability to access parts of large images without having to read the entire image into memory.

This format also supports version numbers and rudimentary validity checks, so it should be more 'supportable' than the previous GD format.

Re-arranged source files
gd.c has been broken into constituant parts: io, gif, gd, gd2 and graphics functions are now in separate files.

Extended I/O capabilities.
The source/sink feature has been extended to support GD2 file formats (which require seek/tell functions; seek must return 1 for success, 0 for failure), and to allow more general non-file I/O.

Better support for Lincoln Stein's Perl Module
The new gdImage*Ptr function returns the chosen format stored in a block of memory. This can be directly used by the GD perl module.

Added functions
gdImageCreateFromGd2Part - allows retrieval of part of an image (good for huge images, like maps),
gdImagePaletteCopy - Copies a palette from one image to another, doing it's best to match the colors in the target image to the colors in the source palette.
gdImageGd2, gdImageCreateFromGd2 - Support for new format
gdImageCopyMerge - Merges two images (useful to highlight part of an image)
gdImageCopyMergeGray - Similar to gdImageCopyMerge, but tries to preserve source image hue.
gdImagePngPtr, gdImageJpegPtr, gdImageWBMPPtr, gdImageGdPtr, gdImageGd2Ptr - return memory blocks for each type of image.
gdImageCreateFromPngCtx, gdImageCreateFromGdCtx, gdImageCreateFromGd2Ctx, gdImageCreateFromGd2PartCtx - Support for new I/O context.
NOTE: In fairness to Thomas Boutell, any bug/problems with any of the above features should probably be reported to Philip Warner.

What's new in version 1.4?

Version 1.4 features the following changes:
Fixed polygon fill routine (again)
Thanks to Kirsten Schulz, version 1.4 is able to fill numerous types of polygons that caused problems with previous releases, including version 1.3.
Support for alternate data sources
Programmers who wish to load a GIF from something other than a stdio FILE * stream can use the new gdImageCreateFromPngSource function.
Support for alternate data destinations
Programmers who wish to write a GIF to something other than a stdio FILE * stream can use the new gdImagePngToSink function.
More tolerant when reading GIFs
Version 1.4 does not crash when reading certain animated GIFs, although it still only reads the first frame. Version 1.4 also has overflow testing code to prevent crashes when reading damaged GIFs.

What's new in version 1.3?

Version 1.3 features the following changes:
Non-LZW-based GIF compression code
Version 1.3 contained GIF compression code that uses simple Run Length Encoding instead of LZW compression, while still retaining compatibility with normal LZW-based GIF decoders (your browser will still like your GIFs). LZW compression is patented by Unisys. We are currently reevaluating the approach taken by gd 1.3. The current release of gd does not support this approach. We recommend that you use the current release, and generate PNG images. Thanks to Hutchison Avenue Software Corporation for contributing the RLE GIF code.
8-bit fonts, and 8-bit font support
This improves support for European languages. Thanks are due to Honza Pazdziora and also to Jan Pazdziora . Also see the provided bdftogd Perl script if you wish to convert fixed-width X11 fonts to gd fonts.
16-bit font support (no fonts provided)
Although no such fonts are provided in the distribution, fonts containing more than 256 characters should work if the gdImageString16 and gdImageStringUp16 routines are used.
Improvements to the "webpng" example/utility
The "webpng" utility is now a slightly more useful application. Thanks to Brian Dowling for this code.
Corrections to the color resolution field of GIF output
Thanks to Bruno Aureli.
Fixed polygon fills
A one-line patch for the infamous polygon fill bug, courtesy of Jim Mason. I believe this fix is sufficient. However, if you find a situation where polygon fills still fail to behave properly, please send code that demonstrates the problem, and a fix if you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive will produce a directory called "gd-2.0.33".

For Unix

cd to the 2.0.33 directory and type:

./configure

NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN /usr/local/lib and the include files are installed in /usr/local/include. IF YOU ARE UPGRADING, you may wish to use:
./configure --prefix=/usr
Rather than just ./configure, before typing make and make install.

If all goes well, this will create a Makefile. If all does not go well -- for instance, if neither the the JPEG nor the PNG and ZLIB libraries are found -- you will need to install those libraries, then come back and run configure again.

If necessary, make changes to the resulting Makefile. Then, type "make". If there are no errors, follow this with "make install". Because gd 2.0 and above installs as a shared library, it is necessary to install the library properly before running gd-based programs.

If you get errors, type ./configure --help for more information about the available options. In the unlikely event that the GNU autoconf-produced configure script does not work well for you, you may wish to try configure.pl, a simple Perl script with similar but less complete capabilities. If all else fails, try renaming makefile.sample to Makefile. However, ./configure is almost always your best bet.

For Windows

Use the DLL version! See the paragraph at the beginning of this sectino. If you really want to compile it yourself for some strange reason, read on.

Create a project using your favorite programming environment. Copy all of the gd files to the project directory. Add gd.c to your project. Add other source files as appropriate. Learning the basic skills of creating projects with your chosen C environment is up to you. Alternatively, use the free mingw32 or cygwin tools, which may prove to be compatible with the provided configure script.

If you wish to test the library, type "make test" AFTER you have successfully executed "make install". This will build several test programs, including "gddemo". (Not all of these programs are expected to print completely successful messages, depending on the nature of the image formats with which some of the tests are tried; for instance, WBMP is a black and white format, so loss of color information is expected there.) Run gddemo to see some of the capabilities of gd. Run gdtestft to play with the freetype support, if you have built gd with it and have access to truetype fonts.

gddemo should execute without incident, creating the file demoout.png. (Note there is also a file named demoin.png, which is provided in the package as part of the demonstration.)

Display demoout.png in your PNG viewer. The image should be 128x128 pixels and should contain an image of the space shuttle with quite a lot of graphical elements drawn on top of it.

(If you are missing the demoin.png file, the other items should appear anyway.)

Look at demoin.png to see the original space shuttle image which was scaled and copied into the output image.

gd basics: using gd in your program

gd lets you create PNG or JPEG images on the fly. To use gd in your program, include the file gd.h, and link with the gd library and the other required libraries; the syntax for most Unix flavors is:
-lgd -lpng -lz -ljpeg -lfreetype -lm
Assuming that all of these libraries are available.

If you want to use the provided simple fonts, include gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive results, install FreeType 2.x and use the gdImageStringFT function. If you are not using the provided Makefile and/or a library-based approach, be sure to include the source modules as well in your project. (They may be too large for 16-bit memory models, that is, 16-bit DOS and Windows.)

Here is a short example program. (For a more advanced example, see gddemo.c, included in the distribution. gddemo.c is NOT the same program; it demonstrates additional features!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
  /* Declare the image */
  gdImagePtr im;
  /* Declare output files */
  FILE *pngout, *jpegout;
  /* Declare color indexes */
  int black;
  int abiliolygon fills still fail to behave properly,
please send code that demonstrates the problem, and a fix if
you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

What else do I need to use gd?

To use gd, you will need an ANSI C compiler. All popular Windows 95 and NT C compilers are ANSI C compliant. Any full-ANSI-standard C compiler should be adequate. The cc compiler released with SunOS 4.1.3 is not an ANSI C compiler. Most Unix users who do not already have gcc should get it. gcc is free, ANSI compliant and a de facto industry standard. Ask your ISP why it is missing.

As of version 1.6, you also need the zlib compression library, and the libpng library. As of version 1.6.2, you can draw text using antialiased TrueType fonts if you also have the libttf library installed, but this is not mandatory. zlib is available for a variety of platforms from the zlib web site. libpng is available for a variety of platforms from the PNG web site.

You will also want a PNG viewer, if you do not already have one for your system, since you will need a good way to check the results of your work. Netscape 4.04 and higher, and Microsoft Internet Explorer 4.0 or higher, both support PNG. Not every PNG-compatible viewer supports alpha channel transparency, which is why gd 2.0.2 and above do alpha blending in the library by default; it is possible to turn on the saving of alpha channel information to the file instead.

How do I get gd?

Binaries (DLL for Windows programmers):

Source Code:

How do I build gd?

Win32 DLL users: if you are using MSVC, use the provided batch file makemsvcimport.bat to make a bgd.lib import library corresponding to the provided bgd.dll. Copy bgd.dll to your application directory, or to your Windows sytem directory. In the settings of your MSVC project, you MUST choose the "multithreaded DLL" library option under "code generation." mingw32 and cygwin users can simply link with the provided libbgd.a stub library in order to use the DLL.
Building gd From the Source

In order to build gd, you must first unpack the archive you have downloaded. If you are not familiar with tar and gunzip (Unix) or ZIP (Windows), please consult with an experienced user of your system. Sorry, we cannot answer questions about basic Internet skills.

Unpacking the archive