Security Advisories (5)
CVE-2016-1238 (2016-08-02)

Imager would search the default current directory entry in @INC when searching for file format support modules.

CPANSA-Imager-2014-01 (2014-01-03)

When drawing on an image with an alpha channel where the source minimum is greater than zero, Imager would read from beyond the end of a malloc() allocated buffer. In rare circumstances this could lead to some of the source image not being written to the target image, or possibly to a segmentation fault.

CVE-2007-2459 (2007-05-02)

Heap-based buffer overflow in the BMP reader (bmp.c) in Imager perl module (libimager-perl) 0.45 through 0.56 allows remote attackers to cause a denial of service (application crash) and possibly execute arbitrary code via crafted 8-bit/pixel compressed BMP files.

CVE-2006-0053 (2006-04-10)

Imager (libimager-perl) before 0.50 allows user-assisted attackers to cause a denial of service (segmentation fault) by writing a 2- or 4-channel JPEG image (or a 2-channel TGA image) to a scalar, which triggers a NULL pointer dereference.

CVE-2024-53901 (2024-11-17)

"invalid next size" backtrace on use of trim on certain images

NAME

Imager::Matrix2d - simple wrapper for matrix construction

SYNOPSIS

use Imager::Matrix2d;
$m1 = Imager::Matrix2d->identity;
$m2 = Imager::Matrix2d->rotate(radians=>$angle, x=>$cx, y=>$cy);
$m3 = Imager::Matrix2d->translate(x=>$dx, y=>$dy);
$m4 = Imager::Matrix2d->shear(x=>$sx, y=>$sy);
$m5 = Imager::Matrix2d->reflect(axis=>$axis);
$m6 = Imager::Matrix2d->scale(x=>$xratio, y=>$yratio);
$m6 = $m1 * $m2;
$m7 = $m1 + $m2;
use Imager::Matrix2d qw(:handy);
# various m2d_* functions imported 
# where m2d_(.*) calls Imager::Matrix2d->$1()

DESCRIPTION

This class provides a simple wrapper around a reference to an array of 9 co-efficients, treated as a matrix:

[ 0, 1, 2,
  3, 4, 5,
  6, 7, 8 ]

Most of the methods in this class are constructors. The others are overloaded operators.

Note that since Imager represents images with y increasing from top to bottom, rotation angles are clockwise, rather than counter-clockwise.

identity()

Returns the identity matrix.

rotate(radians=>$angle)
rotate(degrees=>$angle)

Creates a matrix that rotates around the origin, or around the point (x,y) if the 'x' and 'y' parameters are provided.

translate(x=>$dx, y=>$dy)

Translates by the specify amounts.

shear(x=>$sx, y=>$sy)

Shear by the given amounts.

reflect(axis=>$axis)

Reflect around the given axis, either 'x' or 'y'.

reflect(radians=>$angle)
reflect(degrees=>$angle)

Reflect around a line drawn at the given angle from the origin.

scale(x=>$xratio, y=>$yratio)

Scales at the given ratios.

You can also specify a center for the scaling with the cx and cy parameters.

_mult()

Implements the overloaded '*' operator. Internal use.

Currently both the left and right-hand sides of the operator must be an Imager::Matrix2d.

_add()

Implements the overloaded binary '+' operator.

Currently both the left and right sides of the operator must be Imager::Matrix2d objects.

_string()

Implements the overloaded stringification operator.

This returns a string containing 3 lines of text with no terminating newline.

I tried to make it fairly nicely formatted. You might disagree :)

The following functions are shortcuts to the various constructors.

These are not methods.

You can import these methods with:

use Imager::Matrix2d ':handy';
m2d_identity
m2d_rotate()
m2d_translate()
m2d_shear()
m2d_reflect()

AUTHOR

Tony Cook <tony@develop-help.com>

BUGS

Needs a way to invert matrixes.

SEE ALSO

Imager(3), Imager::Font(3)

http://www.eecs.umich.edu/~addi/perl/Imager/