[magick-users] Gradient text with PerlMagick

Ron Savage ron at savage.net.au
Thu Aug 16 17:53:07 PDT 2007


Hi Eric

As you can see from:

http://savage.net.au/ImageMagick.html

it's definitely possible.

All headings on my web site are generated with a Perl program and IM, and
use a fill which is an image tiled across the text, and the image happens
to be a set of little, round, coloured disks.

Here's the code:
=====><8=====
#!/usr/bin/perl
#
# Name:
#	text-tiled-with-image-2.pl.

# Purpose:
#	Replicate an example on this page:
#	http://www.cit.gu.edu.au/~anthony/graphics/imagick6/text/#size
#
# V 1.01 31-May-2006
# ------------------
# o Upgrade from ImageMagick V 5 to V 6.
#
# V 1.00 30-May-2006
# ------------------
# o Initial version
#
# Test environment:
#	OS: WinXP SP2
#	Web server: Apache/2.0.54
#	ImageMagick: V 6.2.7
#
# Input files:
#	o /homepage/pages/page-names.txt
#	o tile_disks.jpg from
#	http://www.cit.gu.edu.au/~anthony/graphics/imagick6/canvas/#tile
#
# Output files:
#	o N images, using input file /homepage/pages/page-names.txt
#		and using the text to generate the file name.
#
# Note:
#	o tab = 4 spaces || die.
#	o Text NOT reformatted to max 50 chars wide
#	(used when source to be converted to PDF)
#
# Author:
#	Ron Savage <ron at savage.net.au>
#	http://savage.net.au/ImageMagick.html
#
# Licence:
#	Australian copyright (c) 2006 Ron Savage
#
#	All Programs of mine are
#	'OSI Certified Open Source Software';
#	you can redistribute them and/or modify them
#	under the terms of the Artistic License,
#	a copy of which is available at:
#	http://www.opensource.org/licenses/index.html

# References:
# o http://www.cit.gu.edu.au/~anthony/graphics/imagick6/text/#size
# o http://www.cit.gu.edu.au/~anthony/graphics/imagick6/canvas/#tile
# o http://www.cit.gu.edu.au/~anthony/graphics/imagick6/draw/#settings

use strict;
use warnings;

use FindBin::Real;
use Image::Magick;

# ------------------------------------------------

sub doit2it
{
	my($text, $format) = @_;

	# Prepare the background.

	my($image)	= Image::Magick -> new(size => '800x120');
	my($result)	= $image -> Read('xc:black');

	die $result if $result;

	# Prepare the tile.

	my($tile)	= Image::Magick -> new();
	$result		= $tile -> Read(FindBin::Real::Bin() . '/tile_disks.jpg');

	die $result if $result;

	# Draw the text onto the background.
	# Note: The tile option automagically uses an image as the fill option. See:
	# http://www.cit.gu.edu.au/~anthony/graphics/imagick6/canvas/#tile

	$result = $image -> Draw
	(
		primitive	=> 'text',
		points		=> "20, 80 $text",
		tile		=> $tile,
		stroke		=> 'white',
		font		=> 'Carolingia-(BigfooT)--Normal',
		pointsize	=> 100,
	);

	die $result if $result;

	# Trim the image.

	$result = $image -> Trim();

	die $result if $result;

	# Expand the background, just to make the image prettier.

	$result = $image -> Border(fill => 'black', geometry => '10x10');

	die $result if $result;

	# Save the image.

	my($output_file_name) = FindBin::Real::Bin() . "/$text.$format";

	# Warning: This call does not work if it appears just after
Read('xc:black').

	$result = $image -> Transparent(color => 'black');

	die $result if $result;

	$result = $image -> Write($output_file_name);

	die $result if $result;

	print "Wrote $output_file_name. \n";

}	# End of doit2it.

# ------------------------------------------------

# Report ImageMagick version.

print "Image::Magick V $Image::Magick::VERSION. \n";

# Turn all the names of the pages of my web site into files.

my($input_file_name) = '/homepage/pages/page-names.txt';

open(INX, $input_file_name) || die("Can't open($input_file_name): $!");
my(@heading) = <INX>;
close INX;
chomp @heading;

for (@heading)
{
	doit2it($_ eq 'index' ? 'Home' : $_, 'png');
}

print "Finished. \n";
=====><8=====
-- 
Ron Savage
ron at savage.net.au
http://savage.net.au/


More information about the Magick-users mailing list