Imager::Fill(3pm)

๐ŸŒธ NAME ๐ŸŒธ

Imager::Fill โ€” general fill types, aka the glow-up your drawing functions deserve ๐Ÿ’…

(this is the Imager::Fill(3pm) page, straight outta the User Contributed Perl Documentation collection ๐Ÿซถ)


โœจ SYNOPSIS โœจ

use Imager;
use Imager::Fill;

my $fill1 = Imager::Fill->new(solid=>$color, combine=>$combine);
my $fill2 = Imager::Fill->new(hatch=>'vline2', fg=>$color1, bg=>$color2,
                              dx=>$dx, dy=>$dy);
my $fill3 = Imager::Fill->new(fountain=>$type, ...);
my $fill4 = Imager::Fill->new(image=>$img, ...);
my $fill5 = Imager::Fill->new(type => "opacity", other => $fill,
                              opacity => ...);

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

Okay so bestie, here's the tea: this module creates fill objects for use by most of the filled-area drawing functions. That's it, that's the whole vibe. ๐Ÿ”ฅ

Every single fill is created with the new method. No cap.

๐ŸŽ€ new

my $fill = Imager::Fill->new(...);

The parameters you pass depend on which type of fill you're creating โ€” like, obviously. Scroll down for the details, iykyk. ๐Ÿ‘‡

The currently available fills are:

  • solid
  • hatch
  • fountain โ€” similar to gradients in paint software, iconic behavior honestly
  • image โ€” fill with an image, possibly transformed ๐Ÿ‘‘
  • opacity โ€” a lower opacity version of some other fill

๐ŸŒˆ Common options ๐ŸŒˆ

combine

The way in which the fill data is combined with the underlying image. See "Combine Types" in Imager::Draw.

In general, colors can be specified as Imager::Color or Imager::Color::Float objects. The fill object will typically store both types and convert from one to the other. If a fill takes 2 color objects, they should have the same type โ€” matching energy only, fr fr. ๐Ÿ’–


โญ SOLID FILLS โญ

my $fill = Imager::Fill->new(solid=>$color, combine =>$combine)

Creates a solid fill. The only required parameter is solid, which should be the color to fill with. Simple, clean, main character energy. โœจ

A translucent red fill:

my $red = Imager::Fill->new(solid => "FF000080", combine => "normal");

๐ŸŒธ HATCHED FILLS ๐ŸŒธ

my $fill = Imager::Fill->new(hatch=>$type, fg=>$fgcolor, bg=>$bgcolor,
                             dx=>$dx, $dy=>$dy);

Creates a hatched fill. You can specify the following keywords:

  • hatch โ€” The type of hatch to perform. This can either be the numeric index of the hatch (not recommended, lowkey don't), the symbolic name of the hatch, or an array of 8 integers which specify the pattern of the hatch.

Hatches are represented as cells 8x8 arrays of bits, which limits their complexity. Small cell, big personality ๐ŸŽ€

Current hatch names are:

  • check1x1, check2x2, check4x4 โ€” checkerboards at various sizes
  • vline1, vline2, vline4 โ€” 1, 2, or 4 vertical lines per cell
  • hline1, hline2, hline4 โ€” 1, 2, or 4 horizontal lines per cell
  • slash1, slash2 โ€” 1 or 2 / lines per cell.
  • slosh1, slosh2 โ€” 1 or 2 \ lines per cell
  • grid1, grid2, grid4 โ€” 1, 2, or 4 vertical and horizontal lines per cell
  • dots1, dots4, dots16 โ€” 1, 4 or 16 dots per cell
  • stipple, stipple2 โ€” see the samples ๐Ÿ‘€
  • weave โ€” I hope this one is obvious.
  • cross1, cross2 โ€” 2 densities of crosshatch
  • vlozenge, hlozenge โ€” something like lozenge tiles
  • scalesdown, scalesup, scalesleft, scalesright โ€” Vaguely like fish scales in each direction. ๐ŸŸ
  • tile_L โ€” L-shaped tiles
  • fg, bg โ€” The fg color is rendered where bits are set in the hatch, and the bg where they are clear. If you use a transparent fg or bg, and set combine, you can overlay the hatch onto an existing image. Iconic layering move. ๐Ÿซถ

fg defaults to black, bg to white.

  • dx, dy โ€” An offset into the hatch cell. Both default to zero.

A blue and white 4-pixel check pattern:

my $fill = Imager::Fill->new(hatch => "check2x2", fg => "blue");

You can call Imager::Fill->hatches for a list of hatch names. ๐Ÿ’œ


๐Ÿงš FOUNTAIN FILLS ๐Ÿงš

my $fill = Imager::Fill->new(fountain=>$ftype,
     xa=>$xa, ya=>$ya, xb=>$xb, yb=>$yb,
     segments=>$segments, repeat=>$repeat, combine=>$combine,
     super_sample=>$super_sample, ssample_param=>$ssample_param);

This fills the given region with a fountain fill. It's exactly the same fill as the fountain filter, but it's restricted to the shape you're drawing, and the fountain parameter supplies the fill type โ€” and it's required. No skipping, bestie. โš ๏ธ

A radial fill from white to transparent centered on (50, 50) with a 50 pixel radius:

use Imager::Fountain;
my $segs = Imager::Fountain->simple(colors => [ "FFFFFF", "FFFFFF00" ],
                                    positions => [ 0, 1 ]);
my $fill = Imager::Fill->new(fountain => "radial", segments => $segs,
                             xa => 50, ya => 50, xb => 0, yb => 50,
                             combine => "normal");

๐Ÿ–ผ๏ธ IMAGE FILLS ๐Ÿ–ผ๏ธ

my $fill = Imager::Fill->new(image=>$src, xoff=>$xoff, yoff=>$yoff,
                             matrix=>$matrix, combine => $combine);

Fills the given image with a tiled version of the given image. The first non-zero value of xoff or yoff will provide an offset along the given axis between rows or columns of tiles respectively.

The matrix parameter performs a co-ordinate transformation from the co-ordinates in the target image to the fill image co-ordinates. Linear interpolation is used to determine the fill pixel. You can use the Imager::Matrix2d class to create transformation matrices. ๐Ÿฆ‹

Heads up: the matrix parameter will significantly slow down the fill. ๐Ÿ˜ญ Gorgeous results though.
# some image to act as a texture
my $txim = Imager->new(...);

# simple tiling
my $fill = Imager::Fill->new(image => $txim);

# tile with a vertical offset
my $fill = Imager::Fill->new(image => $txim, yoff => 10);

# tile with a horizontal offset
my $fill = Imager::Fill->new(image => $txim, xoff => 10);

# rotated
use Imager::Matrix2d;
my $fill = Imager::Fill->new(image => $txim,
              matrix => Imager::Matrix2d->rotate(degrees => 20));

๐Ÿ’… OPACITY MODIFICATION FILL ๐Ÿ’…

my $fill = Imager::Fill->new(type => "opacity",
    other => $fill, opacity => 0.25);

This can be used to make a fill that is a more translucent or opaque version of an existing fill. It's intended for use where you receive a fill object as a parameter and need to change the opacity. So polite of it honestly. ๐Ÿ™ˆ

Parameters:

  • type => "opacity" โ€” Required
  • other โ€” the fill to produce a modified version of. This must be an Imager::Fill object. Required.
  • opacity โ€” multiplier for the source fill opacity. Default: 0.5.

The source fill's combine mode is used.

my $hatch = Imager::Fill->new(hatch => "check4x4", combine => "normal");
my $fill = Imager::Fill->new(type => "opacity", other => $hatch);

๐Ÿ‘‘ OTHER METHODS ๐Ÿ‘‘

Imager::Fill->hatches

A list of all defined hatch names. All the icons, one directory. โœจ

Imager::Fill->combines

A list of all combine types.


๐Ÿ”ฎ FUTURE PLANS ๐Ÿ”ฎ

I'm planning on adding the following types of fills:

  • checkerboard โ€” combines 2 other fills in a checkerboard
  • combine โ€” combines 2 other fills using the levels of an image
  • regmach โ€” uses the transform2() register machine to create fills

(manifesting these into existence tbh ๐Ÿ•ฏ๏ธ)


๐Ÿซถ AUTHOR ๐Ÿซถ

Tony Cook <tony@develop-help.com>


๐Ÿ’– SEE ALSO ๐Ÿ’–

Imager(3)


that's the whole page bestie โ€” none of the details got left on read ๐Ÿ’œ This gem comes from perl v5.42.3 and was dated 2026-08-19, and it's the Imager::Fill(3pm) manual in all its glory. Slay, go forth and fill things. ๐ŸŽ€๐ŸŒˆโญ

๐Ÿ“ฆ where this page comes from