GD
view release on metacpan or search on metacpan
2.91 * t/affine.t: compare affineInvert(scale(2,3))'s result with an
epsilon (1e-6) instead of exact is_deeply, since -Duselongdouble
perls compute the division in extended precision, giving a
last-few-ULP-different 1/3 than a plain double (GH #68).
* Bumped $VERSION in GD::Image, GD::Image_pm.PL and GD::Polygon to
2.91, in sync with GD.pm; these were left un-bumped in 2.90.
2.90 * Add JXL, UHDR support for new libgd-2.4.0 (from git)
- JXL: newFromJxl/newFromJxlData readers, jxl() writer
(lossless/distance/effort), magic-byte autodetection in new().
- UHDR: new GD::UHDR class (newFromFile/newFromData, width/height/
hasGainMap, resize/crop/rotate/mirror, file/write, getSdr).
- Work around libgd 2.4.0 gd.h no longer declaring gdImageBoundsSafe().
* IMAGEQUANT: trueColorToPaletteSetMethod/SetQuality and the
GD_QUANT_* constants for the libimagequant-backed quantizer.
Guard for installations without libimagequant.
Fix imagequant feature autodetection in Makefile.PL (libimagequant
surfaces in gdlib.pc's Libs.private, not Requires.private).
* Embed rpath (Linux) and fix stale blib/lib/GD/Image.pm so
'make test' reliably exercises the just-configured libgd
(GH #21 test infra); fix GD_LIQ detection from the deprecated
gdlib-config script.
* Add Affine transformations (GH #21): GD::Image affine matrix
builders (affineIdentity/Scale/Rotate/ShearHorizontal/
ShearVertical/Translate/Concat/Invert/Flip/Expansion/
Rectilinear/Equal/ApplyToPoint) and transformAffineGetImage/
transformAffineCopy/transformAffineBoundingBox, wrapping
gdAffine*/gdTransformAffine* (libgd >= 2.1.0). Fix GD_AFFINE_*
constant visibility (same enum/#ifdef issue as GD_QUANT_*).
* Add more previously-unbound libgd methods (libgd >= 2.1.0 unless
noted): paletteToTrueColor, crop, cropAuto, cropThreshold,
colorReplace, colorReplaceArray, colorReplaceThreshold,
convolution, resolution; cloneImage, getTrueColorPixel,
perceptualDiff (libgd >= 2.4.0). clone() now uses the native
gdImageClone() when available, fixing truecolor-ness loss on
the old new()+copy() fallback. Fix GD_CROP_* constant
visibility (same enum/#ifdef issue as GD_QUANT_*).
* Animated WebP support (libgd >= 2.4.0): new GD::WebpAnimWriter
(new/addImage/finish, wrapping gdWebpWriteOpenPtr/AddImage/
PtrFinish) and GD::WebpAnimReader (newFromData/info/nextImage,
wrapping gdWebpReadOpenCtx/GetInfo/NextImage) classes.
* Animated/multi-image JXL support (libgd >= 2.4.0): new
GD::JxlAnimWriter (new/addImage/finish, wrapping
gdJxlWriteOpenPtr/AddImage/PtrFinish) and GD::JxlAnimReader
(newFromData/info/nextImage, wrapping gdJxlReadOpenCtx/
GetInfo/NextImage) classes, mirroring GD::WebpAnimReader/Writer.
* Multi-page TIFF support (libgd >= 2.4.0): new
GD::TiffMultiWriter (new/addImage/finish, wrapping
gdTiffWriteOpenPtr/AddImage/PtrFinish) and GD::TiffMultiReader
(newFromData/info/nextImage, wrapping gdTiffReadOpenCtx/
GetInfo/NextImage) classes, mirroring GD::WebpAnimReader/Writer
(pages have no per-page delay; nextImage() returns a
page-info hashref instead). Also adds the GD_TIFF_* writer
option constants (colorspace, compression, resolution unit,
alpha type).
* Per-format header introspection (libgd >= 2.4.0): new
GD::Image->pngInfoData/jpegInfoData/gifInfoData/bmpInfoData/
avifInfoData/heifInfoData class methods, wrapping
gd{Png,Jpeg,Gif,Bmp,Avif,Heif}GetInfoCtx. Each reads just the
container facts (dimensions, bit depth, and similar) from an
in-memory buffer without fully decoding the image.
* Fixed a longstanding bug in the in-memory gdIOCtx used by every
newFrom*Data()/*InfoData() method: its getC() callback never
advanced the read position, so any decoder reading a buffer
byte-by-byte (as the new bmpInfoData()'s BMP header parser
does) would spin re-reading the first byte forever. PNG, JPEG,
GIF, WebP, TIFF, JXL, AVIF and HEIF decoding were unaffected
because they read through the bulk getBuf() callback instead,
which was already correct.
* Worked around inconsistent success/failure return conventions
across libgd's new Get*InfoCtx functions: gdPngGetInfoCtx,
gdJpegGetInfoCtx, gdAvifGetInfoCtx and gdHeifGetInfoCtx all
return 0 on success despite two of their own header comments
claiming the opposite, while gdGifGetInfoCtx and
gdBmpGetInfoCtx return 1 on success as documented.
2.87 * fix OpenBSD support (Alexander Bluhm, PR #63)
* fix $image->compare() usages (Alexander Bluhm, PR #65, #64)
* fix tiff test without libimagequant (Alexander Bluhm, PR #66)
2.86 * Fix CVE-2026-11526, command injection via 2-arg open() in _make_filehandle.
CWE-78, CWE-73 (Reported and fixed by Paul Johnson)
2.85 * Tolerate runtime TIFF decode failures in autodetect (GH #62)
* Replace cpm with cpanm in github actions
* Fixed a minor precedence bug in t/z_manifest.t
2.84 * Added Makefile.PL --with and --without options to bypass autodetection
errors or upstream libgd or subsequent library errors, as
libtiff 4.5.1+git230720 wrongly packaged on ubuntu/debian (GH #55).
* Better support MSWin32 without gdlib.pc. Requires manual --options and
--lib_gd_path.
* Workaround broken ExtUtils::PkgConfig->find (GH #61)
* Fixed snprintf for newer MSVC (>= VS 2015)
* Added GD::Image::supported() image types method.
* Added newFromTiffData() method.
* Fixed t/GD.t for unsupported image types.
* Add GIFANIM to the default since 2.0.33 (PeterCJ GH #56)
* Honor PKG_CONFIG_PATH for finding gdlib.pc (PeterCJ GH #57)
* Add demos/png2jpeg.pl
2.83 * Fix missing PNG regression (RT #153923) on old
systems without the .pc, but gdlib-config. The check was too strict.
Requires now File::Which.
2.82 * Improve HEIF/AVIF autodetection (RT #153305) by Yuriy Yevtukhov.
* Fix strawberryperl default libgd path (shawnlaffan PR #54)
* Fix AVIF and Webp autodetection in tests (shawnlaffan PR #54)
2.81 * Change GD::Polygon::transform to match old demos (RT #140043),
and GD::Polyline.
Add GD::Polygon::rotate(cw-radian) helper.
Allow GD::Polygon::scale(2.0).
2.80 * Fix broken copyTranspose and copyReverseTranspose (RT #153300)
by Yuriy Yevtukhov.
* Add transformation tests
* Fix wrong WBMP name and detection
* Fix wrong filename extension auto-detection for gd,gd2,wbmp
* Fix wrong filename extension auto-detection for xpm,
newFromXpm needs the filename, not handle.
* Fix wrong libgd doc link (PR #52) by Tsuyoshi Watanabe
2.79 * Improve image type autodetection (RT #153212), add a test
* Fix Avif without Heif config
* Improve gdlib.pc reader for supported library features
2.78 * Fix Use of uninitialized value $pkg in concatenation warning
(RT #148899 and GH #47). Thanks to ppisar for the analysis.
Adds a new hard Test::NoWarnings test requirement.
2.77 * add BMP support with libgd 2.1.0, PR #49 by PeterCJ
* don't link to -lXPM without XPM nor X11, GH #45
* rename ANIMGIF feature to GIFANIM
* fix unused variable failure in GH CI, RT #141125 by PhilterPaper
2.76 * fix broken TIFF and AVIF support, PR #43 by Paul Howarth
* re-enable XBM support (always on)
* provide xbm magic support (a hack, for GD::Graph)
2.75 * add experimental support for TIFF and RAQM (with freetype)
* improve GD2 tests (GH #42, RT #140856)
* also list the unsupported image formats in the GD::Image pod
* fix copyRotated pod (it rotates CCW) PR #36 by LorenzoTo
( run in 2.105 seconds using v1.01-cache-2.11-cpan-bbc515a03b3 )