1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-25 04:43:33 +00:00

upgrade to 2.0.11

Submitted by:	Mikhail Teterin <mi+mx@aldan.algebra.com>
This commit is contained in:
Ying-Chieh Liao 2003-03-25 02:22:37 +00:00
parent bde4f77e6b
commit bf9d8d81b3
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=77433
18 changed files with 158 additions and 794 deletions

View File

@ -6,8 +6,7 @@
#
PORTNAME= gd
PORTVERSION= 2.0.1
PORTREVISION= 3
PORTVERSION= 2.0.11
CATEGORIES+= graphics
MASTER_SITES= http://www.boutell.com/gd/http/ \
ftp://ftp.boutell.com/pub/boutell/gd/ \
@ -41,8 +40,12 @@ MAKE_ARGS+= -j2
MAKE_ARGS+= $v="${$v}"
.endfor
pre-fetch:
.if defined(HAVE_UNISYS_LICENSE)
WITH_LZW= yes
.endif
.if !defined(WITH_LZW)
pre-fetch:
@${ECHO_CMD} "************************************************************"
@${ECHO_CMD} "* If you live outside US and Canada, you can define *"
@${ECHO_CMD} "* WITH_LZW to enable GIF compression support. *"

View File

@ -1 +1 @@
MD5 (gd-2.0.1.tar.gz) = 43af994a97f3300a1165ca4888176ece
MD5 (gd-2.0.11.tar.gz) = e2b6a14e7ac9781789e5d9f189af8475

View File

@ -1,8 +1,15 @@
PROGS!= make -V BIN_PROGRAMS -f ${WRKSRC}/Makefile
TESTS!= make -V TEST_PROGRAMS -f ${WRKSRC}/Makefile
OBJS!= make -V LIBOBJS -f ${WRKSRC}/Makefile
PROGS!= make -V BIN_PROGRAMS -f ${WRKSRC}/makefile.sample
PROGS+= gd2togif gdcmpgif giftogd2
PROGS+= annotate # new utility, not included in makefile.sample
TESTS= gdtest gddemo gd2time gdtestft testac fontsizetest fontwheeltest
SRCS= gd.c gd_gd.c gd_gd2.c gd_io.c gd_io_dp.c gd_io_file.c \
gd_io_ss.c gd_jpeg.c gd_png.c gd_ss.c gd_topal.c \
gd_wbmp.c gdcache.c gdfontg.c gdfontl.c gdfontmb.c \
gdfonts.c gdfontt.c gdft.c gdhelpers.c gdhelpers.h \
gdkanji.c gdtables.c gdxpm.c jisx0208.h mathmake.c \
wbmp.c wbmp.h
SRCS+= gd_gif_in.c gd_gif_out.c gd_biggif_out.c gd_lzw_out.c
MAKEDIR=/usr/share/mk
SRCS= ${OBJS:.o=.c}
LIB=gd
SHLIB_MAJOR=4
SHLIB_MINOR=0
@ -13,7 +20,7 @@ SHLIB_NAME!= make -V SHLIB_NAME LIB=${LIB} \
CFLAGS+=-I${.CURDIR} -I${LOCALBASE}/include/freetype2/ \
-I${LOCALBASE}/include/freetype2/freetype -I${LOCALBASE}/include \
-DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE
-DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DHAVE_LIBZ
LDADD= -L${LOCALBASE}/lib -lpng -lz -ljpeg -lfreetype -lm
.ifndef WITHOUT_XPM

View File

@ -12,7 +12,7 @@ void gdImageBigGif(gdImagePtr im, FILE *outFile)
{
gdIOCtx *out = gdNewFileCtx(outFile);
gdImageBigGifCtx(im, out);
out->free(out);
out->gd_free(out);
}
void* gdImageBigGifPtr(gdImagePtr im, int *size)
@ -21,7 +21,7 @@ void* gdImageBigGifPtr(gdImagePtr im, int *size)
gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
gdImageBigGifCtx(im, out);
rv = gdDPExtractData(out,size);
out->free(out);
out->gd_free(out);
return rv;
}

View File

@ -83,7 +83,7 @@ gdImagePtr gdImageCreateFromGifSource(gdSourcePtr inSource)
im = gdImageCreateFromGifCtx(in);
in->free(in);
in->gd_free(in);
return im;
}
@ -96,7 +96,7 @@ gdImageCreateFromGif(FILE *fdFile)
im = gdImageCreateFromGifCtx(fd);
fd->free(fd);
fd->gd_free(fd);
return im;
}

View File

@ -14,7 +14,7 @@ void gdImageGifToSink(gdImagePtr im, gdSinkPtr outSink)
{
gdIOCtx *out = gdNewSSCtx(NULL,outSink);
gdImageGifCtx(im, out);
out->free(out);
out->gd_free(out);
}
void gdImageGifCtx(gdImagePtr im, gdIOCtx *out)

View File

@ -72,7 +72,7 @@ void gdImageLzw(gdImagePtr im, FILE *outFile)
{
gdIOCtx *out = gdNewFileCtx(outFile);
gdImageLzwCtx(im, out);
out->free(out);
out->gd_free(out);
}
void* gdImageLzwPtr(gdImagePtr im, int *size)
@ -81,7 +81,7 @@ void* gdImageLzwPtr(gdImagePtr im, int *size)
gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
gdImageLzwCtx(im, out);
rv = gdDPExtractData(out,size);
out->free(out);
out->gd_free(out);
return rv;
}

View File

@ -1,47 +0,0 @@
--- Makefile.orig Thu Apr 25 14:14:43 2002
+++ Makefile Thu Apr 25 14:10:10 2002
@@ -67,7 +67,7 @@
PROGRAMS=$(BIN_PROGRAMS) $(TEST_PROGRAMS)
-BIN_PROGRAMS=pngtogd pngtogd2 gdtopng gd2topng gd2copypal gdparttopng webpng
+BIN_PROGRAMS=pngtogd pngtogd2 gdtopng gd2topng gd2copypal gdparttopng webpng gd2togif gdcmpgif giftogd2
TEST_PROGRAMS=gdtest gddemo gd2time gdtestft testac
default: instructions
@@ -94,6 +94,9 @@
sh ./install-item 755 gd2topng $(INSTALL_BIN)/gd2topng
sh ./install-item 755 gd2copypal $(INSTALL_BIN)/gd2copypal
sh ./install-item 755 gdparttopng $(INSTALL_BIN)/gdparttopng
+ sh ./install-item 755 gd2togif $(INSTALL_BIN)/gd2togif
+ sh ./install-item 755 gdcmpgif $(INSTALL_BIN)/gdcmpgif
+ sh ./install-item 755 giftogd2 $(INSTALL_BIN)/giftogd2
sh ./install-item 755 webpng $(INSTALL_BIN)/webpng
sh ./install-item 755 bdftogd $(INSTALL_BIN)/bdftogd
sh ./install-item 644 gd.h $(INSTALL_INCLUDE)/gd.h
@@ -141,8 +144,18 @@
gdtestft: gdtestft.o
$(CC) --verbose gdtestft.o -o gdtestft $(LIBDIRS) $(LIBS)
+gd2togif: gd2togif.o libgd.a
+ $(CC) --verbose gd2togif.o -o gd2togif $(LIBDIRS) $(LIBS)
+
+gdcmpgif: gdcmpgif.o libgd.a
+ $(CC) --verbose gdcmpgif.o -o gdcmpgif $(LIBDIRS) $(LIBS)
+
+giftogd2: giftogd2.o libgd.a
+ $(CC) --verbose giftogd2.o -o giftogd2 $(LIBDIRS) $(LIBS)
+
LIBOBJS=gd.o gd_gd.o gd_gd2.o gd_io.o gd_io_dp.o \
gd_io_file.o gd_ss.o gd_io_ss.o gd_png.o gd_jpeg.o gdxpm.o \
+ gd_gif_in.o gd_gif_out.o gd_biggif_out.o gd_lzw_out.o \
gdfontt.o gdfonts.o gdfontmb.o gdfontl.o gdfontg.o \
gdtables.o gdft.o gdcache.o gdkanji.o wbmp.o \
gd_wbmp.o gdhelpers.o gd_topal.o
@@ -171,5 +184,4 @@
-ranlib libgd.a
clean:
- rm -f *.o *.a *.so ${PROGRAMS} test/gdtest.jpg test/gdtest.wbmp
-
+ rm -f *.o *.a *.so ${PROGRAMS} test/gdtest.jpg test/gdtest.wbmp demoout.png test/fttest.png

View File

@ -1,69 +1,5 @@
--- gd.c.orig Thu Apr 25 14:15:15 2002
--- gd.c Thu Apr 25 14:15:15 2002
+++ gd.c Thu Apr 25 12:43:55 2002
@@ -1651,18 +1651,37 @@
if (dst->trueColor)
{
/* 2.0: much easier when the destination is truecolor. */
+
+ if (src->trueColor) {
for (y = 0; (y < h); y++)
{
for (x = 0; (x < w); x++)
{
int c = gdImageGetTrueColorPixel (src, srcX + x,
srcY + y);
+ gdImageSetPixel (dst,
+ dstX + x,
+ dstY + y,
+ c);
+ }
+ }
+
+ }
+ else {
+ /* source is palette based */
+ for (y = 0; (y < h); y++)
+ {
+ for (x = 0; (x < w); x++)
+ {
+ int c = gdImageGetPixel (src, srcX + x,
+ srcY + y);
if (c != src->transparent)
{
gdImageSetPixel (dst,
dstX + x,
dstY + y,
- c);
+ gdTrueColor(src->red[c], src->green[c], src->blue[c]));
+ }
}
}
}
@@ -1795,18 +1814,18 @@
else
{
dc = gdImageGetPixel (dst, tox, toy);
- g = 0.29900 * dst->red[dc]
- + 0.58700 * dst->green[dc]
- + 0.11400 * dst->blue[dc];
+ g = 0.29900 * gdImageRed(dst,dc)
+ + 0.58700 * gdImageGreen(dst,dc)
+ + 0.11400 * gdImageBlue(dst, dc);
ncR = gdImageRed (src, c) * (pct / 100.0)
- + gdImageRed (dst, dc) * g *
+ + g *
((100 - pct) / 100.0);
ncG = gdImageGreen (src, c) * (pct / 100.0)
- + gdImageGreen (dst, dc) * g *
+ + g *
((100 - pct) / 100.0);
ncB = gdImageBlue (src, c) * (pct / 100.0)
- + gdImageBlue (dst, dc) * g *
+ + g *
((100 - pct) / 100.0);
/* First look for an exact match */
@@ -2211,7 +2230,17 @@
}

View File

@ -1,67 +1,41 @@
--- gd.h.orig Thu Apr 25 14:15:24 2002
+++ gd.h Thu Apr 25 12:43:55 2002
@@ -201,6 +201,10 @@
--- gd.h Thu Jan 16 11:28:09 2003
+++ gd.h Mon Mar 24 16:26:14 2003
@@ -209,4 +209,8 @@
gdImagePtr gdImageCreateFromPngSource (gdSourcePtr in);
gdImagePtr gdImageCreateFromPngSource(gdSourcePtr in);
+gdImagePtr gdImageCreateFromGif(FILE *fd);
+gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
+gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in);
+ gdImagePtr gdImageCreateFromGif(FILE *fd);
+ gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
+ gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in);
+
gdImagePtr gdImageCreateFromGd(FILE *in);
gdImagePtr gdImageCreateFromGdCtx(gdIOCtxPtr in);
gdImagePtr gdImageCreateFromGd (FILE * in);
gdImagePtr gdImageCreateFromGdCtx (gdIOCtxPtr in);
@@ -300,4 +304,5 @@
@@ -251,12 +255,26 @@
char *gdImageStringFT(gdImage *im, int *brect, int fg, char *fontlist,
double ptsize, double angle, int x, int y, char *string);
void gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c);
+ void gdImageOpenPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
void gdImageFilledPolygon (gdImagePtr im, gdPointPtr p, int n, int c);
+typedef struct {
+ int flags; /* for future expansion logical OR of gdFTEX_ values */
+ double linespacing; /* fine tune line spacing for '\n' */
+} gdFTStringExtra, *gdFTStringExtraPtr;
+#define gdFTEX_LINESPACE 1
@@ -395,4 +400,13 @@
void *gdImageJpegPtr (gdImagePtr im, int *size, int quality);
+ void gdImageLzw(gdImagePtr im, FILE *out);
+ void* gdImageLzwPtr(gdImagePtr im, int *size);
+ void gdImageLzwCtx(gdImagePtr im, gdIOCtxPtr out);
+
+/* FreeType 2 text output with fine tuning */
+char *
+gdImageStringFTEx(gdImage * im, int *brect, int fg, char * fontlist,
+ double ptsize, double angle, int x, int y, char * string,
+ gdFTStringExtraPtr strex);
+ void gdImageBigGif(gdImagePtr im, FILE *out);
+ void* gdImageBigGifPtr(gdImagePtr im, int *size);
+ void gdImageBigGifCtx(gdImagePtr im, gdIOCtxPtr out);
+
+
/* Point type for use in polygon drawing. */
typedef struct {
int x, y;
} gdPoint, *gdPointPtr;
void gdImagePolygon(gdImagePtr im, gdPointPtr p, int n, int c);
+void gdImageOpenPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
void gdImageFilledPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
/* These functions still work with truecolor images,
@@ -347,6 +365,14 @@
/* Best to free this memory with gdFree(), not free() */
void *gdImageJpegPtr(gdImagePtr im, int *size, int quality);
+void gdImageLzw(gdImagePtr im, FILE *out);
+void* gdImageLzwPtr(gdImagePtr im, int *size);
+void gdImageLzwCtx(gdImagePtr im, gdIOCtxPtr out);
+
+void gdImageBigGif(gdImagePtr im, FILE *out);
+void* gdImageBigGifPtr(gdImagePtr im, int *size);
+void gdImageBigGifCtx(gdImagePtr im, gdIOCtxPtr out);
+
/* A custom data sink. For backwards compatibility. Use
gdIOCtx instead. */
/* The sink function must return -1 on error, otherwise the number
@@ -358,6 +384,11 @@
} gdSink, *gdSinkPtr;
@@ -408,4 +422,9 @@
void gdImagePngToSink(gdImagePtr im, gdSinkPtr out);
void gdImagePngToSink (gdImagePtr im, gdSinkPtr out);
+
+void gdImageGif(gdImagePtr im, FILE *out);
+void* gdImageGifPtr(gdImagePtr im, int *size);
+void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out);
+void gdImageGifToSink(gdImagePtr im, gdSinkPtr out);
+ void gdImageGif(gdImagePtr im, FILE *out);
+ void* gdImageGifPtr(gdImagePtr im, int *size);
+ void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out);
+ void gdImageGifToSink(gdImagePtr im, gdSinkPtr out);
void gdImageGd(gdImagePtr im, FILE *out);
void gdImageGd2(gdImagePtr im, FILE *out, int cs, int fmt);
void gdImageGd (gdImagePtr im, FILE * out);

View File

@ -1,11 +0,0 @@
--- gd_png.c.orig Thu Apr 25 14:15:42 2002
+++ gd_png.c Thu Apr 25 12:43:55 2002
@@ -225,7 +225,7 @@
im->alpha[i] = gdAlphaMax - (trans[i] >> 1);
if ((trans[i] == 0) && (firstZero))
{
- im->transparent = i;
+ transparent = i;
firstZero = 0;
}
}

View File

@ -1,11 +0,0 @@
--- gdcache.h.orig Thu Apr 25 14:16:05 2002
+++ gdcache.h Thu Apr 25 12:48:41 2002
@@ -40,7 +40,7 @@
/* header */
/*********************************************************/
-#include <malloc.h>
+#include <stdlib.h>
#ifndef NULL
#define NULL (void *)0
#endif

View File

@ -1,166 +1,92 @@
--- gdft.c.orig Thu Apr 25 14:16:21 2002
+++ gdft.c Thu Apr 25 12:43:55 2002
@@ -513,7 +513,8 @@
gdTrueColorGetRed (fg),
gdTrueColorGetGreen (fg),
gdTrueColorGetBlue (fg),
- gdAlphaMax - (gdTrueColorGetAlpha (fg) * pixel / NUMCOLORS));
+ gdAlphaMax - ((gdAlphaMax - gdTrueColorGetAlpha (fg)) * pixel / NUMCOLORS)
+ );
--- gdft.c Thu Jan 16 13:29:32 2003
+++ gdft.c Mon Mar 24 17:09:54 2003
@@ -546,8 +546,8 @@
a->tweencolor = gdTrueColorAlpha (gdTrueColorGetRed (fg),
gdTrueColorGetGreen (fg),
gdTrueColorGetBlue (fg),
- gdAlphaMax -
- (gdTrueColorGetAlpha (fg) *
+ gdAlphaMax - ((gdAlphaMax -
+ gdTrueColorGetAlpha (fg)) *
pixel / NUMCOLORS));
}
else
{
@@ -566,76 +567,53 @@
@@ -680,10 +680,14 @@
if (y >= im->sy || y < 0)
continue;
for (col = 0; col < bitmap.width; col++, pc++)
{
- for (col = 0; col < bitmap.width; col++, pc++)
- {
- if (bitmap.pixel_mode == ft_pixel_mode_grays)
- {
+ x = pen_x + col;
+ for (col = 0; col < bitmap.width; col++, pc++) {
+ x = pen_x + col;
+ /* clip if out of bounds */
+ if (x >= im->sx || x < 0)
+ continue;
+
+ /* clip if out of bounds */
+ if (x >= im->sx || x < 0)
+ continue;
+
+ switch(bitmap.pixel_mode) {
+ case ft_pixel_mode_grays:
+ switch(bitmap.pixel_mode) {
+ case ft_pixel_mode_grays:
/*
* Round to NUMCOLORS levels of antialiasing for
* index color images since only 256 colors are
* available.
*/
+
@@ -692,44 +696,38 @@
tc_key.pixel = ((bitmap.buffer[pc] * NUMCOLORS)
+ bitmap.num_grays / 2)
/ (bitmap.num_grays - 1);
- }
- else if (bitmap.pixel_mode == ft_pixel_mode_mono)
- {
+ break;
+ case ft_pixel_mode_mono:
tc_key.pixel = ((bitmap.buffer[pc / 8]
<< (pc % 8)) & 128) ? NUMCOLORS : 0;
- tc_key.pixel = ((bitmap.buffer[pc / 8]
- << (pc % 8)) & 128) ? NUMCOLORS : 0;
+ break;
+ case ft_pixel_mode_mono:
/* 2.0.5: mode_mono fix from Giuliano Pochini */
tc_key.pixel =
((bitmap.
buffer[(col >> 3) +
pcr]) & (1 << (~col & 0x07))) ? NUMCOLORS : 0;
- }
- else
- {
+ break;
+ default:
+ break;
+ default:
return "Unsupported ft_pixel_mode";
}
if (tc_key.pixel > 0)
- { /* if not background */
- }
+ }
+
if (tc_key.pixel > 0) /* if not background */
{
- x = pen_x + col;
-
- /* clip if out of bounds */
- if (x >= im->sx || x < 0)
- continue;
- /* get pixel location in gd buffer */
- if (im->trueColor)
{
- tpixel = &im->tpixels[y][x];
+
+ if (im->trueColor) {
+ tc_elem = (tweencolor_t *) gdCacheGet (
+ tc_cache, &tc_key);
+
+ gdImageSetPixel(im, x, y, tc_elem->tweencolor);
}
- else
- pixel = &im->pixels[y][x];
- if (tc_key.pixel == NUMCOLORS)
- {
+ else {
pixel = &im->pixels[y][x];
- }
if (tc_key.pixel == NUMCOLORS)
- {
- /* use fg color directly */
- if (im->trueColor)
- {
- *tpixel = fg;
- }
- else
- {
*pixel = fg;
- }
+ if (im->trueColor) {
+ tc_elem = (tweencolor_t *)gdCacheGet(tc_cache, &tc_key);
+ gdImageSetPixel(im, x, y, tc_elem->tweencolor);
+ } else {
+ /* get pixel location in gd buffer */
+ pixel = &im->pixels[y][x];
+ if (tc_key.pixel == NUMCOLORS)
/* use fg color directly. gd 2.0.2: watch out for
negative indexes (thanks to David Marwood). */
*pixel = (fg < 0) ? -fg : fg;
- }
- else
- {
- /* find antialised color */
- if (im->trueColor)
- {
- tc_key.bgcolor = *tpixel;
- }
- else
- {
+ else {
tc_key.bgcolor = *pixel;
- }
tc_elem = (tweencolor_t *) gdCacheGet (
tc_cache, &tc_key);
- if (im->trueColor)
- {
- *tpixel = tc_elem->tweencolor;
- }
- else
- {
*pixel = tc_elem->tweencolor;
+
}
+
+ else {
/* find antialised color */
tc_key.bgcolor = *pixel;
tc_elem = (tweencolor_t *) gdCacheGet (tc_cache, &tc_key);
*pixel = tc_elem->tweencolor;
}
+ }
}
}
@@ -647,11 +625,18 @@
/********************************************************************/
/* gdImageStringFT - render a utf8 string onto a gd image */
-
char *
gdImageStringFT (gdImage * im, int *brect, int fg, char *fontlist,
double ptsize, double angle, int x, int y, char *string)
{
+ return gdImageStringFTEx(im, brect, fg, fontlist, ptsize, angle, x, y, string, NULL);
+}
+
+char *
+gdImageStringFTEx (gdImage * im, int *brect, int fg, char *fontlist,
+ double ptsize, double angle, int x, int y, char *string,
+ gdFTStringExtra * strex)
+{
FT_BBox bbox, glyph_bbox;
FT_Matrix matrix;
FT_Vector pen, delta, penf;
@@ -672,6 +657,9 @@
int render = (im && (im->trueColor || (fg <= 255 && fg >= -255)));
FT_BitmapGlyph bm;
+ /* fine tuning */
+ double linespace = LINESPACE;
+
/***** initialize font library and font cache on first call ******/
static gdCache_head_t *fontCache;
static FT_Library library;
@@ -704,6 +692,14 @@
return "Could not set character size";
}
+ /* pull in supplied extended settings */
+ if (strex) {
+ if (strex->flags & gdFTEX_LINESPACE == gdFTEX_LINESPACE)
+ linespace = strex->linespacing;
+
+ }
+
+
matrix.xx = (FT_Fixed) (cos_a * (1 << 16));
matrix.yx = (FT_Fixed) (sin_a * (1 << 16));
matrix.xy = -matrix.yx;
@@ -754,7 +750,7 @@
/* newlines */
if (ch == '\n')
{
- penf.y -= face->size->metrics.height * LINESPACE;
+ penf.y -= face->size->metrics.height * linespace;
penf.y = (penf.y - 32) & -64; /* round to next pixel row */
x1 = (penf.x * cos_a - penf.y * sin_a + 32) / 64;
y1 = (penf.x * sin_a + penf.y * cos_a + 32) / 64;

View File

@ -2,7 +2,7 @@
+++ gdtest.c Tue Nov 6 15:53:38 2001
@@ -84,6 +84,35 @@
gdImageDestroy (im2);
ctx->free (ctx);
ctx->gd_free (ctx);
+ /* */
+ /* Send to GIF File then Ptr */
@ -32,7 +32,7 @@
+ CompareImages("GD->GIF ptr->GD", ref, im2);
+
+ gdImageDestroy(im2);
+ ctx->free(ctx);
+ ctx->gd_free(ctx);
/* */
/* Send to GD2 File then Ptr */

View File

@ -1,99 +0,0 @@
--- gdtestft.c.orig Thu Apr 25 14:17:03 2002
+++ gdtestft.c Wed Nov 7 00:43:02 2001
@@ -18,6 +18,8 @@
#define MAXY(x) MAX4(x[1],x[3],x[5],x[7])
#define MINY(x) MIN4(x[1],x[3],x[5],x[7])
+void CompareImages(char *msg, gdImagePtr im1, gdImagePtr im2);
+
int
main (int argc, char *argv[])
{
@@ -28,13 +30,13 @@
fprintf (stderr, "make clean, and type make again.\n");
return 1;
#else
- gdImagePtr im;
+ gdImagePtr im, ref;
int black;
int white;
int brect[8];
int x, y;
char *err;
- FILE *out;
+ FILE *out, *in;
#ifdef JISX0208
char *s = "Hello. ‚±‚ñ‚É‚¿‚Í Qyjpqg,"; /* String to draw. */
#else
@@ -67,8 +69,8 @@
/* create an image just big enough for the string */
x = MAXX (brect) - MINX (brect) + 6;
y = MAXY (brect) - MINY (brect) + 6;
-#if 0
- im = gdImageCreate (500, 500);
+#if 0
+ im = gdImageCreate (x, y);
#else
/* gd 2.0: true color images can use freetype too */
im = gdImageCreateTrueColor (x, y);
@@ -90,6 +92,16 @@
fprintf (stderr, err);
return 1;
}
+
+ in = fopen("test/fttestref.png", "rb");
+ if (!in) {
+ fprintf(stderr, "Input file does not exist!\n");
+ exit(1);
+ }
+ ref = gdImageCreateFromPng(in);
+
+ fclose(in);
+
/* TBB: Write img to test/fttest.png */
out = fopen ("test/fttest.png", "wb");
if (!out)
@@ -100,9 +112,43 @@
gdImagePng (im, out);
fclose (out);
fprintf (stderr, "Test image written to test/fttest.png\n");
+
+ CompareImages("FTTest Image", ref, im);
+
/* Destroy it */
gdImageDestroy (im);
+ gdImageDestroy(ref);
return 0;
#endif /* HAVE_FREETYPE */
}
+
+void CompareImages(char *msg, gdImagePtr im1, gdImagePtr im2)
+{
+ int cmpRes;
+
+ cmpRes = gdImageCompare(im1, im2);
+
+ if (cmpRes & GD_CMP_IMAGE) {
+ printf("%%%s: ERROR images differ: BAD\n",msg);
+ } else if (cmpRes != 0) {
+ printf("%%%s: WARNING images differ: WARNING - Probably OK\n",msg);
+ } else {
+ printf("%%%s: OK\n",msg);
+ return;
+ }
+
+ if (cmpRes & (GD_CMP_SIZE_X + GD_CMP_SIZE_Y)) {
+ printf("-%s: INFO image sizes differ\n",msg);
+ }
+
+ if (cmpRes & GD_CMP_NUM_COLORS) {
+ printf("-%s: INFO number of pallette entries differ %d Vs. %d\n",msg,
+ im1->colorsTotal, im2->colorsTotal);
+ }
+
+ if (cmpRes & GD_CMP_COLOR) {
+ printf("-%s: INFO actual colours of pixels differ\n",msg);
+ }
+}
+

View File

@ -1,23 +1,20 @@
--- index.html.orig Thu Apr 25 14:17:36 2002
+++ index.html Tue Nov 6 23:31:10 2001
@@ -24,7 +24,12 @@
more compatible with the major Web browsers than even PNG is. WBMP is
intended for wireless devices (not regular web browsers). Existing
code will need modification to call gdImagePng or gdImageJpeg instead
-of gdImageGif. <strong>Please do not ask us to send you the old GIF
+of gdImageGif.
+<p>
+Note: The version at this site also supports GIF format, for those people
+who have not yet managed to move away from GIFs.
--- index.html Mon Nov 25 11:39:31 2002
+++ index.html Wed Nov 27 12:47:38 2002
@@ -35,4 +35,9 @@
modern image formats such as PNG and JPEG as soon as possible.
+<p>Note, that the FreeBSD port of gd2 includes support for GIF files
+ported from the earlier releases of gd. If the WITH_LZW was defined at
+build time, the software will also use LZW-compression when creating
+GIF files.
+
<p>
gd 2.0.8 <strong>requires</strong> that the following libraries
@@ -116,4 +121,18 @@
Portions relating to WBMP copyright 2000, 2001, 2002 Maurice Szmurlo and Johan Van
den Brande.
+
+<p>
+<strong>Please do not ask the original author to send you the old GIF
version of GD.</strong> Unisys holds a patent on the LZW compression
algorithm, which is used in fully compressed GIF images. The best
solution is to move to legally unencumbered, well-compressed,
@@ -103,6 +108,18 @@
<p>
Portions relating to libttf copyright 1999, 2000 John Ellson (ellson@lucent.com).
<p>
+GIF decompression code copyright 1990, 1991, 1993, by David Koblas
+(koblas@netcom.com).
+<p>
@ -29,63 +26,34 @@
+Obtaining a license for the Unisys LZW compression patent is
+entirely between the user and Unisys. The authors of gd can provide
+NO assistance in this matter.
+<p>
Portions relating to JPEG and to color quantization copyright 2000, Doug
Becker and copyright (C) 1994-1998, Thomas G. Lane. This software is based
in part on the work of the Independent JPEG Group. See the file
@@ -193,6 +210,26 @@
<li><a href="http://s27w007.pswfs.gov/tgd/">tgd</a>, by Bradley K. Sherman
<li><a href="http://www.unimelb.edu.au/fly/fly.html">fly</a>, by Martin Gleeson
+
<p>
<strong>Permission has been granted to copy, distribute and modify gd in any
@@ -192,5 +211,22 @@
<li><a href="http://martin.gleeson.com/fly/">fly</a>, by Martin Gleeson
</ul>
-<P>
+
+<P><A NAME="gifpatch"><H3>What's new in the patched version?</H3></A>
+<P><A NAME="gifpatch"><H3>What does the FreeBSD port add?</H3></A>
+
+This version reinstates GIF support. Specifically, the following functions are added:
+<ul>
+<li><a href=#gdImageOpenPolygon>gdImageOpenPolygon</a>. This is basically the same as
+gdImagePolygon, but it does not join the start and end points. It is required by GD.pm.
+<li><a href=#gdImageGif>gdImageGif</a>
+<li><a href=#gdImageGifPtr>gdImageGifPtr</a>
+<li><a href=#gdImageGifCtx>gdImageGifCtx</a>
+<li><a href=#gdImageGifToSink>gdImageGifToSink</a>
+<li><a href=#gdImageCreateFromGif>gdImageCreateFromGif</a>
+<li><a href=#gdImageCreateFromGifCtx>gdImageCreateFromGifCtx</a>
+<li>Other functions added, but not documented, are: gdImageLzw, gdImageLzwPtr,
+gdImageLzwCtx, gdImageBigGif, gdImageBigGifPtr, gdImageBigGifCtx.
+</ul>
+<p>
+Note: While every effort has been made to ensure that the _WinNT_ build works, it has not
+been tested.
+<p>This version reinstates GIF support. Specifically, the following
+functions are added: gdImageGif, gdImageGifPtr, gdImageGifCtx,
+gdImageGifToSink, gdImageCreateFromGif, gdImageCreateFromGifCtx,
+gdImageCreateFromGifSource.
+The can be used just like the corresponding functions for the other
+image formats.
+
<P><A NAME="whatsnew2.0.1"><H3>What's new in version 2.0.1?</H3></A>
<ul>
<li>Workaround for a bug in gcc, apparently found in gcc 2.7.2 and up.
@@ -311,6 +348,7 @@
preprocessing them, this should not be a big problem. gd 2.0 should
read old .gd and .gd2 files correctly.
</ul>
+<p>Other functions added, but not documented, are: gdImageLzw,
+gdImageLzwPtr, gdImageLzwCtx, gdImageBigGif, gdImageBigGifPtr,
+gdImageBigGifCtx.
+
<P><A NAME="whatsnew1.8.4"><H3>What's new in version 1.8.4?</H3></A>
<ul>
<li>Add support for FreeType2 (John Ellson ellson@lucent.com)
@@ -343,6 +381,7 @@
corrected
<li>Updated links to fast-moving, always dodging libpng and zlib web sites
</ul>
+<p>The <a href=#gdImageOpenPolygon>gdImageOpenPolygon</a> is added.
+This is basically the same as <a href=#gdImagePolygon>gdImagePolygon</A>,
+but it does not join the start and end points. It is required by GD.pm.
+
<P><A NAME="whatsnew1.8.1"><H3>What's new in version 1.8.1?</H3></A>
<ul>
<li>Optional components no longer built by default (following the
@@ -420,6 +459,7 @@
<a href="#gdImageCreateFromXpm"><code>gdImageCreateFromXpm</code></a>
function, if the Xpm library is available. Thanks to Caolan McNamara.
</ul>
+
<P><A NAME="whatsnew1.6.3"><H3>What's new in version 1.6.3?</H3></A>
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
@@ -911,7 +951,8 @@
<DT><A NAME="gdPoint">gdPoint</A> <strong>(TYPE)</strong>
<A NAME="whatsnew2.0.8"><H3>What's new in version 2.0.8?</H3></A>
<P>
@@ -1058,5 +1094,6 @@
<DD>
Represents a point in the coordinate space of the image; used
-by <A HREF="#gdImagePolygon">gdImagePolygon</A> and
@ -93,228 +61,11 @@
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A>, and
<A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
<PRE>
typedef struct {
@@ -921,7 +962,8 @@
<DT><A NAME="gdPointPtr">gdPointPtr</A> <strong>(TYPE)</strong>
@@ -1068,5 +1105,6 @@
<DD>
A pointer to a <A HREF="#gdPoint">gdPoint</A> structure; passed
-as an argument to <A HREF="#gdImagePolygon">gdImagePolygon</A>
+as an argument to <A HREF="#gdImagePolygon">gdImagePolygon</A>,
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A>,
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A>,
and <A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
</DL>
<DT><A NAME="gdSource">gdSource</A> <strong>(TYPE)</strong>
@@ -1024,6 +1066,75 @@
/* ... Use the image ... */
<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
</PRE>
+
+<DT><A NAME="gdImageCreateFromGif">gdImageCreateFromGif(FILE *in)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromGifCtx">gdImageCreateFromGifCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
+<strong>(FUNCTION)</strong>
+<p>
+<DD>
+gdImageCreateFromGif is called to load images from GIF format files.
+Invoke gdImageCreateFromGif with an already opened pointer to a file
+containing the desired image.
+gdImageCreateFromGif
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain a GIF image). gdImageCreateFromGif does <em>not</em>
+close the file. You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<PRE>
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+... inside a function ...
+FILE *in;
+in = fopen("mygif.gif", "rb");
+im = gdImageCreateFromGif(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageCreateFromGifSource">gdImageCreateFromGifSource(gdSourcePtr in)</A>
+<strong>(FUNCTION)</strong>
+<dd>
+gdImageCreateFromGifSource is called to load a GIF from
+a data source other than a file. Usage is very similar to
+the <a href="#gdImageCreateFromGif">gdImageCreateFromGif</a> function,
+except that the programmer provides a custom data source.
+<p>
+The programmer must write an input function which accepts
+a context pointer, a buffer, and a number of bytes to be
+read as arguments. This function must read the number of
+bytes requested, unless the end of the file has been reached,
+in which case the function should return zero, or an error
+has occurred, in which case the function should return
+<code>-1</code>. The programmer then creates a
+<a href="#gdSource">gdSource</a> structure and sets
+the <code>source</code> pointer to the input function and
+the context pointer to any value which is useful to the
+programmer.
+<p>
+The example below
+implements <a href="#gdImageCreateFromGif">gdImageCreateFromGif</a>
+by creating a custom data source and invoking gdImageCreateFromGifSource.
+<pre>
+static int freadWrapper(void *context, char *buf, int len);
+
+gdImagePtr gdImageCreateFromGif(FILE *in)
+{
+ gdSource s;
+ s.source = freadWrapper;
+ s.context = in;
+ return gdImageCreateFromGifSource(&s);
+}
+
+static int freadWrapper(void *context, char *buf, int len)
+{
+ int got = fread(buf, 1, len, (FILE *) context);
+ return got;
+}
+</pre>
+
+
<DT><A NAME="gdImageCreateFromPng">gdImageCreateFromPng(FILE *in)</A>
<strong>(FUNCTION)</strong>
<BR><A NAME="gdImageCreateFromPngCtx">gdImageCreateFromPngCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
@@ -1239,6 +1350,92 @@
/* Now destroy it */
<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
</PRE>
+
+<DT><A NAME="gdImageGif">
+void gdImageGif(gdImagePtr im, FILE *out)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageGif outputs the specified image to the specified
+file in GIF format. The file must be open for writing. Under MSDOS
+and all versions of Windows, it is important to use "wb" as opposed
+to simply "w" as the mode when opening the file, and under Unix there
+is no penalty for doing so. gdImageGif does <em>not</em>
+close the file; your code must do so.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black, white;
+FILE *out;
+/* Create the image */
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Allocate background */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);
+/* Allocate drawing color */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);
+/* Draw rectangle */
+<A HREF="#gdImageRectangle">gdImageRectangle</A>(im, 0, 0, 99, 99, black);
+/* Open output file in binary mode */
+out = fopen("rect.gif", "wb");
+/* Write GIF */
+gdImageGif(im, out);
+/* Close file */
+fclose(out);
+/* Destroy image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+
+<DT><A NAME="gdImageGifCtx">
+void* gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageGif except that it writes the GIF to a
+<a href=#gdIOCtx>gdIOCtx</a>.
+<p>
+<DT><A NAME="gdImageGifPtr">
+void* gdImageGifPtr(gdImagePtr im, int *size)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageGif except that it returns a pointer to a memory
+area with the GIF data. This memory must be freed by the caller when it is
+no longer needed. The 'size' parameter received the total size of the block
+of memory.
+<p>
+
+<DT><A NAME="gdImageGifToSink">gdImageGifToSink(gdImagePtr im, gdSinkPtr out)</A>
+<strong>(FUNCTION)</strong>
+<dd>
+gdImageGifToSink is called to write a GIF to
+a data "sink" (destination) other than a file. Usage is very similar to
+the <a href="#gdImageGif">gdImageGif</a> function,
+except that the programmer provides a custom data sink.
+<p>
+The programmer must write an output function which accepts
+a context pointer, a buffer, and a number of bytes to be
+written as arguments. This function must write the number of
+bytes requested and return that number, unless an error
+has occurred, in which case the function should return
+<code>-1</code>. The programmer then creates a
+<a href="#gdSink">gdSink</a> structure and sets
+the <code>sink</code> pointer to the output function and
+the context pointer to any value which is useful to the
+programmer.
+<p>
+The example below
+implements <a href="#gdImageGif">gdImageGif</a>
+by creating a custom data source and invoking gdImageGifFromSink.
+<pre>
+static int stdioSink(void *context, char *buffer, int len)
+{
+ return fwrite(buffer, 1, len, (FILE *) context);
+}
+
+void gdImageGif(gdImagePtr im, FILE *out)
+{
+ gdSink mySink;
+ mySink.context = (void *) out;
+ mySink.sink = stdioSink;
+ gdImageGifToSink(im, &mySink);
+}
+</pre>
+
<DT><A NAME="gdImageJpeg">
void gdImageJpeg(gdImagePtr im, FILE *out, int quality)</A>
<STRONG>(FUNCTION)</STRONG><BR>
@@ -1642,6 +1839,15 @@
/* Destroy it */
<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
</PRE>
+
+<DT><A NAME="gdImageOpenPolygon">void gdImageOpenPolygon(gdImagePtr im, gdPointPtr points, int pointsTotal, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageOpenPolygon is used to draw an open polygon (ie. series of line segments). It is almost identical
+to <A HREF="#gdImagePolygon">gdImagePolygon</A>, except that it does not join the last point to the
+first point.
+<P>
+
<DT><A NAME="gdImageRectangle">void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color)</A>
<STRONG>(FUNCTION)</STRONG>
<DD>
@@ -3552,6 +3758,9 @@
<A HREF="#gdImageCreateFromGd">gdImageCreateFromGd</A> |
<A HREF="#gdImageCreateFromGd2">gdImageCreateFromGd2</A> |
<A HREF="#gdImageCreateFromGd2Part">gdImageCreateFromGd2Part</A> |
+<A HREF="#gdImageCreateFromGif">gdImageCreateFromGif</A> |
+<A HREF="#gdImageCreateFromGifCtx">gdImageCreateFromGifCtx</A> |
+<A HREF="#gdImageCreateFromGifSource">gdImageCreateFromGifSource</A> |
<A HREF="#gdImageCreateFromJpeg">gdImageCreateFromJpeg</A> |
<A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A> |
<A HREF="#gdImageCreateFromPngSource">gdImageCreateFromPngSource</A> |
@@ -3569,6 +3778,10 @@
<A HREF="#gdImageGetInterlaced">gdImageGetInterlaced</A> |
<A HREF="#gdImageGetPixel">gdImageGetPixel</A> |
<A HREF="#gdImageGetTransparent">gdImageGetTransparent</A> |
+<A HREF="#gdImageGif">gdImageGif</A> |
+<A HREF="#gdImageGifCtx">gdImageGifCtx</A> |
+<A HREF="#gdImageGifPtr">gdImageGifPtr</A> |
+<A HREF="#gdImageGifToSink">gdImageGifToSink</A> |
<A HREF="#gdImageGreen">gdImageGreen</A> |
<A HREF="#gdImageInterlace">gdImageInterlace</A> |
<A HREF="#gdImageJpeg">gdImageJpeg</A> |
@@ -3578,6 +3791,7 @@
<A HREF="#gdImagePng">gdImagePng</A> |
<A HREF="#gdImagePngToSink">gdImagePngToSink</A> |
<A HREF="#gdImagePolygon">gdImagePolygon</A> |
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A> |
<A HREF="#gdImagePtr">gdImagePtr</A> |
<A HREF="#gdImageWBMP">gdImageWBMP</A> |
<A HREF="#gdImageRectangle">gdImageRectangle</A> |

View File

@ -1,66 +0,0 @@
--- webpng.c.orig Thu Apr 25 14:19:03 2002
+++ webpng.c Thu Apr 25 12:43:55 2002
@@ -168,12 +168,12 @@
t = gdImageGetTransparent (im);
if (t != (-1))
{
- printf ("First 100% transparent index: %d\n", t);
+ printf ("First 100%% transparent index: %d\n", t);
}
else
{
/* -1 means the image is not transparent. */
- printf ("First 100% transparent index: none\n");
+ printf ("First 100%% transparent index: none\n");
}
if (gdImageGetInterlaced (im))
{
@@ -185,6 +185,40 @@
}
no = 0;
}
+ else if (!strcmp(argv[i], "-a"))
+ {
+ int maxx, maxy, x, y, alpha, pix, nalpha = 0;
+
+ maxx = gdImageSX(im);
+ maxy = gdImageSY(im);
+
+ printf("alpha channel information:\n");
+
+ if (im->trueColor) {
+ for (y = 0; y < maxy; y++) {
+ for (x = 0; x < maxx; x++) {
+ pix = gdImageGetPixel(im, x, y);
+ alpha = gdTrueColorGetAlpha(pix);
+
+ if (alpha > gdAlphaOpaque) {
+ /* Use access macros to learn colors. */
+ printf ("%d %d %d %d\n",
+ gdTrueColorGetRed(pix),
+ gdTrueColorGetGreen(pix),
+ gdTrueColorGetBlue(pix),
+ alpha);
+ nalpha++;
+ }
+
+ }
+ }
+ }
+ else
+ printf("NOT a true color image\n");
+ no = 0;
+ printf("%d alpha channels\n", nalpha);
+
+ }
else
{
fprintf (stderr, "Unknown argument: %s\n", argv[i]);
@@ -202,6 +236,7 @@
" -l Prints the table of color indexes\n"
" -t [index] Set the transparent color to the specified index (0-255 or \"none\")\n"
" -d Reports the dimensions and other characteristics of the image.\n"
+ " -a Prints all alpha channels that are not 100%% opaque.\n"
"\n"
"If you specify '-' as the input file, stdin/stdout will be used input/output.\n"
);

View File

@ -1,3 +1,4 @@
bin/annotate
bin/bdftogd
bin/gd2copypal
bin/gd2togif