mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-24 00:45:52 +00:00
upgrade to 2.0.11
Submitted by: Mikhail Teterin <mi+mx@aldan.algebra.com>
This commit is contained in:
parent
bde4f77e6b
commit
bf9d8d81b3
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=77433
@ -6,8 +6,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
PORTNAME= gd
|
PORTNAME= gd
|
||||||
PORTVERSION= 2.0.1
|
PORTVERSION= 2.0.11
|
||||||
PORTREVISION= 3
|
|
||||||
CATEGORIES+= graphics
|
CATEGORIES+= graphics
|
||||||
MASTER_SITES= http://www.boutell.com/gd/http/ \
|
MASTER_SITES= http://www.boutell.com/gd/http/ \
|
||||||
ftp://ftp.boutell.com/pub/boutell/gd/ \
|
ftp://ftp.boutell.com/pub/boutell/gd/ \
|
||||||
@ -41,8 +40,12 @@ MAKE_ARGS+= -j2
|
|||||||
MAKE_ARGS+= $v="${$v}"
|
MAKE_ARGS+= $v="${$v}"
|
||||||
.endfor
|
.endfor
|
||||||
|
|
||||||
pre-fetch:
|
.if defined(HAVE_UNISYS_LICENSE)
|
||||||
|
WITH_LZW= yes
|
||||||
|
.endif
|
||||||
|
|
||||||
.if !defined(WITH_LZW)
|
.if !defined(WITH_LZW)
|
||||||
|
pre-fetch:
|
||||||
@${ECHO_CMD} "************************************************************"
|
@${ECHO_CMD} "************************************************************"
|
||||||
@${ECHO_CMD} "* If you live outside US and Canada, you can define *"
|
@${ECHO_CMD} "* If you live outside US and Canada, you can define *"
|
||||||
@${ECHO_CMD} "* WITH_LZW to enable GIF compression support. *"
|
@${ECHO_CMD} "* WITH_LZW to enable GIF compression support. *"
|
||||||
|
@ -1 +1 @@
|
|||||||
MD5 (gd-2.0.1.tar.gz) = 43af994a97f3300a1165ca4888176ece
|
MD5 (gd-2.0.11.tar.gz) = e2b6a14e7ac9781789e5d9f189af8475
|
||||||
|
@ -1,8 +1,15 @@
|
|||||||
PROGS!= make -V BIN_PROGRAMS -f ${WRKSRC}/Makefile
|
PROGS!= make -V BIN_PROGRAMS -f ${WRKSRC}/makefile.sample
|
||||||
TESTS!= make -V TEST_PROGRAMS -f ${WRKSRC}/Makefile
|
PROGS+= gd2togif gdcmpgif giftogd2
|
||||||
OBJS!= make -V LIBOBJS -f ${WRKSRC}/Makefile
|
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
|
MAKEDIR=/usr/share/mk
|
||||||
SRCS= ${OBJS:.o=.c}
|
|
||||||
LIB=gd
|
LIB=gd
|
||||||
SHLIB_MAJOR=4
|
SHLIB_MAJOR=4
|
||||||
SHLIB_MINOR=0
|
SHLIB_MINOR=0
|
||||||
@ -13,7 +20,7 @@ SHLIB_NAME!= make -V SHLIB_NAME LIB=${LIB} \
|
|||||||
|
|
||||||
CFLAGS+=-I${.CURDIR} -I${LOCALBASE}/include/freetype2/ \
|
CFLAGS+=-I${.CURDIR} -I${LOCALBASE}/include/freetype2/ \
|
||||||
-I${LOCALBASE}/include/freetype2/freetype -I${LOCALBASE}/include \
|
-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
|
LDADD= -L${LOCALBASE}/lib -lpng -lz -ljpeg -lfreetype -lm
|
||||||
|
|
||||||
.ifndef WITHOUT_XPM
|
.ifndef WITHOUT_XPM
|
||||||
|
@ -12,7 +12,7 @@ void gdImageBigGif(gdImagePtr im, FILE *outFile)
|
|||||||
{
|
{
|
||||||
gdIOCtx *out = gdNewFileCtx(outFile);
|
gdIOCtx *out = gdNewFileCtx(outFile);
|
||||||
gdImageBigGifCtx(im, out);
|
gdImageBigGifCtx(im, out);
|
||||||
out->free(out);
|
out->gd_free(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* gdImageBigGifPtr(gdImagePtr im, int *size)
|
void* gdImageBigGifPtr(gdImagePtr im, int *size)
|
||||||
@ -21,7 +21,7 @@ void* gdImageBigGifPtr(gdImagePtr im, int *size)
|
|||||||
gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
|
gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
|
||||||
gdImageBigGifCtx(im, out);
|
gdImageBigGifCtx(im, out);
|
||||||
rv = gdDPExtractData(out,size);
|
rv = gdDPExtractData(out,size);
|
||||||
out->free(out);
|
out->gd_free(out);
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ gdImagePtr gdImageCreateFromGifSource(gdSourcePtr inSource)
|
|||||||
|
|
||||||
im = gdImageCreateFromGifCtx(in);
|
im = gdImageCreateFromGifCtx(in);
|
||||||
|
|
||||||
in->free(in);
|
in->gd_free(in);
|
||||||
|
|
||||||
return im;
|
return im;
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ gdImageCreateFromGif(FILE *fdFile)
|
|||||||
|
|
||||||
im = gdImageCreateFromGifCtx(fd);
|
im = gdImageCreateFromGifCtx(fd);
|
||||||
|
|
||||||
fd->free(fd);
|
fd->gd_free(fd);
|
||||||
|
|
||||||
return im;
|
return im;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ void gdImageGifToSink(gdImagePtr im, gdSinkPtr outSink)
|
|||||||
{
|
{
|
||||||
gdIOCtx *out = gdNewSSCtx(NULL,outSink);
|
gdIOCtx *out = gdNewSSCtx(NULL,outSink);
|
||||||
gdImageGifCtx(im, out);
|
gdImageGifCtx(im, out);
|
||||||
out->free(out);
|
out->gd_free(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gdImageGifCtx(gdImagePtr im, gdIOCtx *out)
|
void gdImageGifCtx(gdImagePtr im, gdIOCtx *out)
|
||||||
|
@ -72,7 +72,7 @@ void gdImageLzw(gdImagePtr im, FILE *outFile)
|
|||||||
{
|
{
|
||||||
gdIOCtx *out = gdNewFileCtx(outFile);
|
gdIOCtx *out = gdNewFileCtx(outFile);
|
||||||
gdImageLzwCtx(im, out);
|
gdImageLzwCtx(im, out);
|
||||||
out->free(out);
|
out->gd_free(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* gdImageLzwPtr(gdImagePtr im, int *size)
|
void* gdImageLzwPtr(gdImagePtr im, int *size)
|
||||||
@ -81,7 +81,7 @@ void* gdImageLzwPtr(gdImagePtr im, int *size)
|
|||||||
gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
|
gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
|
||||||
gdImageLzwCtx(im, out);
|
gdImageLzwCtx(im, out);
|
||||||
rv = gdDPExtractData(out,size);
|
rv = gdDPExtractData(out,size);
|
||||||
out->free(out);
|
out->gd_free(out);
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
|
@ -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
|
+++ 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 @@
|
@@ -2211,7 +2230,17 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,67 +1,41 @@
|
|||||||
--- gd.h.orig Thu Apr 25 14:15:24 2002
|
--- gd.h Thu Jan 16 11:28:09 2003
|
||||||
+++ gd.h Thu Apr 25 12:43:55 2002
|
+++ gd.h Mon Mar 24 16:26:14 2003
|
||||||
@@ -201,6 +201,10 @@
|
@@ -209,4 +209,8 @@
|
||||||
|
gdImagePtr gdImageCreateFromPngSource (gdSourcePtr in);
|
||||||
|
|
||||||
gdImagePtr gdImageCreateFromPngSource(gdSourcePtr in);
|
+ gdImagePtr gdImageCreateFromGif(FILE *fd);
|
||||||
|
+ gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
|
||||||
+gdImagePtr gdImageCreateFromGif(FILE *fd);
|
+ gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in);
|
||||||
+gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
|
|
||||||
+gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in);
|
|
||||||
+
|
+
|
||||||
gdImagePtr gdImageCreateFromGd(FILE *in);
|
gdImagePtr gdImageCreateFromGd (FILE * in);
|
||||||
gdImagePtr gdImageCreateFromGdCtx(gdIOCtxPtr in);
|
gdImagePtr gdImageCreateFromGdCtx (gdIOCtxPtr in);
|
||||||
|
@@ -300,4 +304,5 @@
|
||||||
|
|
||||||
@@ -251,12 +255,26 @@
|
void gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c);
|
||||||
char *gdImageStringFT(gdImage *im, int *brect, int fg, char *fontlist,
|
+ void gdImageOpenPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
|
||||||
double ptsize, double angle, int x, int y, char *string);
|
void gdImageFilledPolygon (gdImagePtr im, gdPointPtr p, int n, int c);
|
||||||
|
|
||||||
+typedef struct {
|
@@ -395,4 +400,13 @@
|
||||||
+ int flags; /* for future expansion logical OR of gdFTEX_ values */
|
void *gdImageJpegPtr (gdImagePtr im, int *size, int quality);
|
||||||
+ double linespacing; /* fine tune line spacing for '\n' */
|
|
||||||
+} gdFTStringExtra, *gdFTStringExtraPtr;
|
+ void gdImageLzw(gdImagePtr im, FILE *out);
|
||||||
+#define gdFTEX_LINESPACE 1
|
+ void* gdImageLzwPtr(gdImagePtr im, int *size);
|
||||||
|
+ void gdImageLzwCtx(gdImagePtr im, gdIOCtxPtr out);
|
||||||
+
|
+
|
||||||
+/* FreeType 2 text output with fine tuning */
|
+ void gdImageBigGif(gdImagePtr im, FILE *out);
|
||||||
+char *
|
+ void* gdImageBigGifPtr(gdImagePtr im, int *size);
|
||||||
+gdImageStringFTEx(gdImage * im, int *brect, int fg, char * fontlist,
|
+ void gdImageBigGifCtx(gdImagePtr im, gdIOCtxPtr out);
|
||||||
+ double ptsize, double angle, int x, int y, char * string,
|
|
||||||
+ gdFTStringExtraPtr strex);
|
|
||||||
+
|
+
|
||||||
+
|
|
||||||
/* 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
|
/* A custom data sink. For backwards compatibility. Use
|
||||||
gdIOCtx instead. */
|
gdIOCtx instead. */
|
||||||
/* The sink function must return -1 on error, otherwise the number
|
@@ -408,4 +422,9 @@
|
||||||
@@ -358,6 +384,11 @@
|
|
||||||
} gdSink, *gdSinkPtr;
|
|
||||||
|
|
||||||
void gdImagePngToSink(gdImagePtr im, gdSinkPtr out);
|
void gdImagePngToSink (gdImagePtr im, gdSinkPtr out);
|
||||||
+
|
+
|
||||||
+void gdImageGif(gdImagePtr im, FILE *out);
|
+ void gdImageGif(gdImagePtr im, FILE *out);
|
||||||
+void* gdImageGifPtr(gdImagePtr im, int *size);
|
+ void* gdImageGifPtr(gdImagePtr im, int *size);
|
||||||
+void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out);
|
+ void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out);
|
||||||
+void gdImageGifToSink(gdImagePtr im, gdSinkPtr out);
|
+ void gdImageGifToSink(gdImagePtr im, gdSinkPtr out);
|
||||||
|
|
||||||
void gdImageGd(gdImagePtr im, FILE *out);
|
void gdImageGd (gdImagePtr im, FILE * out);
|
||||||
void gdImageGd2(gdImagePtr im, FILE *out, int cs, int fmt);
|
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
@ -1,166 +1,92 @@
|
|||||||
--- gdft.c.orig Thu Apr 25 14:16:21 2002
|
--- gdft.c Thu Jan 16 13:29:32 2003
|
||||||
+++ gdft.c Thu Apr 25 12:43:55 2002
|
+++ gdft.c Mon Mar 24 17:09:54 2003
|
||||||
@@ -513,7 +513,8 @@
|
@@ -546,8 +546,8 @@
|
||||||
gdTrueColorGetRed (fg),
|
a->tweencolor = gdTrueColorAlpha (gdTrueColorGetRed (fg),
|
||||||
gdTrueColorGetGreen (fg),
|
gdTrueColorGetGreen (fg),
|
||||||
gdTrueColorGetBlue (fg),
|
gdTrueColorGetBlue (fg),
|
||||||
- gdAlphaMax - (gdTrueColorGetAlpha (fg) * pixel / NUMCOLORS));
|
- gdAlphaMax -
|
||||||
+ gdAlphaMax - ((gdAlphaMax - gdTrueColorGetAlpha (fg)) * pixel / NUMCOLORS)
|
- (gdTrueColorGetAlpha (fg) *
|
||||||
+ );
|
+ gdAlphaMax - ((gdAlphaMax -
|
||||||
|
+ gdTrueColorGetAlpha (fg)) *
|
||||||
|
pixel / NUMCOLORS));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
@@ -680,10 +680,14 @@
|
||||||
@@ -566,76 +567,53 @@
|
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)
|
- 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 */
|
+ switch(bitmap.pixel_mode) {
|
||||||
+ if (x >= im->sx || x < 0)
|
+ case ft_pixel_mode_grays:
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
+ switch(bitmap.pixel_mode) {
|
|
||||||
+ case ft_pixel_mode_grays:
|
|
||||||
/*
|
/*
|
||||||
* Round to NUMCOLORS levels of antialiasing for
|
* Round to NUMCOLORS levels of antialiasing for
|
||||||
* index color images since only 256 colors are
|
* index color images since only 256 colors are
|
||||||
* available.
|
@@ -692,44 +696,38 @@
|
||||||
*/
|
|
||||||
+
|
|
||||||
tc_key.pixel = ((bitmap.buffer[pc] * NUMCOLORS)
|
tc_key.pixel = ((bitmap.buffer[pc] * NUMCOLORS)
|
||||||
+ bitmap.num_grays / 2)
|
+ bitmap.num_grays / 2)
|
||||||
/ (bitmap.num_grays - 1);
|
/ (bitmap.num_grays - 1);
|
||||||
- }
|
- }
|
||||||
- else if (bitmap.pixel_mode == ft_pixel_mode_mono)
|
- else if (bitmap.pixel_mode == ft_pixel_mode_mono)
|
||||||
- {
|
- {
|
||||||
+ break;
|
- tc_key.pixel = ((bitmap.buffer[pc / 8]
|
||||||
+ case ft_pixel_mode_mono:
|
- << (pc % 8)) & 128) ? NUMCOLORS : 0;
|
||||||
tc_key.pixel = ((bitmap.buffer[pc / 8]
|
+ break;
|
||||||
<< (pc % 8)) & 128) ? NUMCOLORS : 0;
|
+ 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
|
- else
|
||||||
- {
|
- {
|
||||||
+ break;
|
+ break;
|
||||||
+ default:
|
+ default:
|
||||||
return "Unsupported ft_pixel_mode";
|
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;
|
- x = pen_x + col;
|
||||||
-
|
-
|
||||||
- /* clip if out of bounds */
|
- /* clip if out of bounds */
|
||||||
- if (x >= im->sx || x < 0)
|
- if (x >= im->sx || x < 0)
|
||||||
- continue;
|
- continue;
|
||||||
- /* get pixel location in gd buffer */
|
- /* get pixel location in gd buffer */
|
||||||
- if (im->trueColor)
|
- pixel = &im->pixels[y][x];
|
||||||
{
|
- if (tc_key.pixel == NUMCOLORS)
|
||||||
- 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
|
|
||||||
- {
|
- {
|
||||||
+ else {
|
+ if (im->trueColor) {
|
||||||
pixel = &im->pixels[y][x];
|
+ tc_elem = (tweencolor_t *)gdCacheGet(tc_cache, &tc_key);
|
||||||
- }
|
+ gdImageSetPixel(im, x, y, tc_elem->tweencolor);
|
||||||
if (tc_key.pixel == NUMCOLORS)
|
+ } else {
|
||||||
- {
|
+ /* get pixel location in gd buffer */
|
||||||
- /* use fg color directly */
|
+ pixel = &im->pixels[y][x];
|
||||||
- if (im->trueColor)
|
+ if (tc_key.pixel == NUMCOLORS)
|
||||||
- {
|
/* use fg color directly. gd 2.0.2: watch out for
|
||||||
- *tpixel = fg;
|
negative indexes (thanks to David Marwood). */
|
||||||
- }
|
*pixel = (fg < 0) ? -fg : fg;
|
||||||
- else
|
|
||||||
- {
|
|
||||||
*pixel = fg;
|
|
||||||
- }
|
|
||||||
- }
|
- }
|
||||||
- else
|
- else
|
||||||
- {
|
- {
|
||||||
- /* find antialised color */
|
+ else {
|
||||||
- if (im->trueColor)
|
/* find antialised color */
|
||||||
- {
|
|
||||||
- tc_key.bgcolor = *tpixel;
|
tc_key.bgcolor = *pixel;
|
||||||
- }
|
tc_elem = (tweencolor_t *) gdCacheGet (tc_cache, &tc_key);
|
||||||
- else
|
*pixel = tc_elem->tweencolor;
|
||||||
- {
|
|
||||||
+ 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;
|
|
||||||
+
|
|
||||||
}
|
|
||||||
+
|
|
||||||
}
|
}
|
||||||
|
+ }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
+++ gdtest.c Tue Nov 6 15:53:38 2001
|
+++ gdtest.c Tue Nov 6 15:53:38 2001
|
||||||
@@ -84,6 +84,35 @@
|
@@ -84,6 +84,35 @@
|
||||||
gdImageDestroy (im2);
|
gdImageDestroy (im2);
|
||||||
ctx->free (ctx);
|
ctx->gd_free (ctx);
|
||||||
|
|
||||||
+ /* */
|
+ /* */
|
||||||
+ /* Send to GIF File then Ptr */
|
+ /* Send to GIF File then Ptr */
|
||||||
@ -32,7 +32,7 @@
|
|||||||
+ CompareImages("GD->GIF ptr->GD", ref, im2);
|
+ CompareImages("GD->GIF ptr->GD", ref, im2);
|
||||||
+
|
+
|
||||||
+ gdImageDestroy(im2);
|
+ gdImageDestroy(im2);
|
||||||
+ ctx->free(ctx);
|
+ ctx->gd_free(ctx);
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* Send to GD2 File then Ptr */
|
/* Send to GD2 File then Ptr */
|
||||||
|
@ -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);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
@ -1,23 +1,20 @@
|
|||||||
--- index.html.orig Thu Apr 25 14:17:36 2002
|
--- index.html Mon Nov 25 11:39:31 2002
|
||||||
+++ index.html Tue Nov 6 23:31:10 2001
|
+++ index.html Wed Nov 27 12:47:38 2002
|
||||||
@@ -24,7 +24,12 @@
|
@@ -35,4 +35,9 @@
|
||||||
more compatible with the major Web browsers than even PNG is. WBMP is
|
modern image formats such as PNG and JPEG as soon as possible.
|
||||||
intended for wireless devices (not regular web browsers). Existing
|
|
||||||
code will need modification to call gdImagePng or gdImageJpeg instead
|
+<p>Note, that the FreeBSD port of gd2 includes support for GIF files
|
||||||
-of gdImageGif. <strong>Please do not ask us to send you the old GIF
|
+ported from the earlier releases of gd. If the WITH_LZW was defined at
|
||||||
+of gdImageGif.
|
+build time, the software will also use LZW-compression when creating
|
||||||
+<p>
|
+GIF files.
|
||||||
+Note: The version at this site also supports GIF format, for those people
|
+
|
||||||
+who have not yet managed to move away from GIFs.
|
<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>
|
+<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
|
+GIF decompression code copyright 1990, 1991, 1993, by David Koblas
|
||||||
+(koblas@netcom.com).
|
+(koblas@netcom.com).
|
||||||
+<p>
|
+<p>
|
||||||
@ -29,63 +26,34 @@
|
|||||||
+Obtaining a license for the Unisys LZW compression patent is
|
+Obtaining a license for the Unisys LZW compression patent is
|
||||||
+entirely between the user and Unisys. The authors of gd can provide
|
+entirely between the user and Unisys. The authors of gd can provide
|
||||||
+NO assistance in this matter.
|
+NO assistance in this matter.
|
||||||
+<p>
|
+
|
||||||
Portions relating to JPEG and to color quantization copyright 2000, Doug
|
<p>
|
||||||
Becker and copyright (C) 1994-1998, Thomas G. Lane. This software is based
|
<strong>Permission has been granted to copy, distribute and modify gd in any
|
||||||
in part on the work of the Independent JPEG Group. See the file
|
@@ -192,5 +211,22 @@
|
||||||
@@ -193,6 +210,26 @@
|
<li><a href="http://martin.gleeson.com/fly/">fly</a>, by Martin Gleeson
|
||||||
<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
|
|
||||||
</ul>
|
</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:
|
+<p>This version reinstates GIF support. Specifically, the following
|
||||||
+<ul>
|
+functions are added: gdImageGif, gdImageGifPtr, gdImageGifCtx,
|
||||||
+<li><a href=#gdImageOpenPolygon>gdImageOpenPolygon</a>. This is basically the same as
|
+gdImageGifToSink, gdImageCreateFromGif, gdImageCreateFromGifCtx,
|
||||||
+gdImagePolygon, but it does not join the start and end points. It is required by GD.pm.
|
+gdImageCreateFromGifSource.
|
||||||
+<li><a href=#gdImageGif>gdImageGif</a>
|
+The can be used just like the corresponding functions for the other
|
||||||
+<li><a href=#gdImageGifPtr>gdImageGifPtr</a>
|
+image formats.
|
||||||
+<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><A NAME="whatsnew2.0.1"><H3>What's new in version 2.0.1?</H3></A>
|
+<p>Other functions added, but not documented, are: gdImageLzw,
|
||||||
<ul>
|
+gdImageLzwPtr, gdImageLzwCtx, gdImageBigGif, gdImageBigGifPtr,
|
||||||
<li>Workaround for a bug in gcc, apparently found in gcc 2.7.2 and up.
|
+gdImageBigGifCtx.
|
||||||
@@ -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><A NAME="whatsnew1.8.4"><H3>What's new in version 1.8.4?</H3></A>
|
+<p>The <a href=#gdImageOpenPolygon>gdImageOpenPolygon</a> is added.
|
||||||
<ul>
|
+This is basically the same as <a href=#gdImagePolygon>gdImagePolygon</A>,
|
||||||
<li>Add support for FreeType2 (John Ellson ellson@lucent.com)
|
+but it does not join the start and end points. It is required by GD.pm.
|
||||||
@@ -343,6 +381,7 @@
|
|
||||||
corrected
|
|
||||||
<li>Updated links to fast-moving, always dodging libpng and zlib web sites
|
|
||||||
</ul>
|
|
||||||
+
|
+
|
||||||
<P><A NAME="whatsnew1.8.1"><H3>What's new in version 1.8.1?</H3></A>
|
<A NAME="whatsnew2.0.8"><H3>What's new in version 2.0.8?</H3></A>
|
||||||
<ul>
|
<P>
|
||||||
<li>Optional components no longer built by default (following the
|
@@ -1058,5 +1094,6 @@
|
||||||
@@ -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>
|
|
||||||
<DD>
|
<DD>
|
||||||
Represents a point in the coordinate space of the image; used
|
Represents a point in the coordinate space of the image; used
|
||||||
-by <A HREF="#gdImagePolygon">gdImagePolygon</A> and
|
-by <A HREF="#gdImagePolygon">gdImagePolygon</A> and
|
||||||
@ -93,228 +61,11 @@
|
|||||||
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A>, and
|
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A>, and
|
||||||
<A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
|
<A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
|
||||||
<PRE>
|
<PRE>
|
||||||
typedef struct {
|
@@ -1068,5 +1105,6 @@
|
||||||
@@ -921,7 +962,8 @@
|
|
||||||
<DT><A NAME="gdPointPtr">gdPointPtr</A> <strong>(TYPE)</strong>
|
|
||||||
<DD>
|
<DD>
|
||||||
A pointer to a <A HREF="#gdPoint">gdPoint</A> structure; passed
|
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>
|
||||||
+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>.
|
and <A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
|
||||||
</DL>
|
</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> |
|
|
||||||
|
@ -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"
|
|
||||||
);
|
|
@ -1,3 +1,4 @@
|
|||||||
|
bin/annotate
|
||||||
bin/bdftogd
|
bin/bdftogd
|
||||||
bin/gd2copypal
|
bin/gd2copypal
|
||||||
bin/gd2togif
|
bin/gd2togif
|
||||||
|
Loading…
Reference in New Issue
Block a user