NAME
CGI::Imagemap - interpret NCSA imagemaps for CGI programs
SYNOPSIS
use CGI::Imagemap;
$map = new CGI::Imagemap;
$map->addmap(-file=>"image.map");
#OR
$map->addmap(@map);
eval { $action = $map->action($x,$y) };
#Check $@ for errors
DESCRIPTION
CGI::Imagemap allows CGI programmers to emulate the NCSA imagemap CGI or place TYPE=IMAGE form fields on their forms.
The imagemap file follows that of the NCSA imagemap program. See "NOTES" for further details.
- addmap(-file=>image.map)
-
This appends the contents of the file to the map object.
$map->addmap('path/to/file.map'); - addmap(@map)
-
This appends @map to the map object.
$map->addmap('point http://cpan.org 3,9'); - action(x,y)
-
This finds the URI defined by the map for the point at x and y. Returns undef if nothing matches. ie; no point and no default directives
$action = $map->action($x, $y);actionthrows an exception if there is an error. You should catch this with block eval and check $@
NOTES
NCSA Style Image Map Syntax
Blank lines and comments (start with #) are ignored. Each line in the map consists of a directive such as a shape name followed by the URI to associate with the shape and the points defining the shape. A point is an x,y tuple. Supported directives are
- default URI
-
The URI for a selection not within any defined shape, if there are no point directives defined.
- point URI point
-
Point objects do not themselves have to be clicked, instead if no shape was clicked the point closest to the clicked location matches.
- circle URI centerPoint edgePoint
-
A circle with radius extending from centerPoint to edgePoint.
- oval URI centerPoint xAxis, yAxis
-
An oval (ellipse) centered at centerPoint with the defined axes.
oval 50,50 30,30Is the same as
circle 50,50 20,50 - rect URI upperLeftPoint lowerRightPoint
-
A rectangle from upperleftPoint to lowerRightPoint. eg;
rectangle 10,10 30,30Is a rectangle with corners at 10,10 10,30 30,30 30,10
- poly URI point1 point2 . . . pointN
-
A closed polygon defined by edges connecting points in the order listed. eg;
poly 10,10 10,30 30,30 30,10Is the same as the rectangle above.
The input coordinates are matched against the targets in the order which they were added to the object eg; read from the map file. This is normal behavior and so if you have overlapping shapes be sure to order them properly. Additionally, if you have complex non-overlapping shapes their order will affect the time to match. Place the simplest or most likely to be selected shapes first in your map file.
AUTHOR
Jerrad Pierce <jpierce@cpan.org>
CREDITS
Based upon CGI::Imagemap 1.00 by Mike Heins <mikeh@cpan.org>.
Who intern gladly reused code from imagemap.pl by V. Khera <khera@kciLink.com>.
Point in polygon detection based on code by Mike Lyons <lyonsm@netbistro.com>.
Point in oval detection based on code by Lynn Bry <lynn@pharmdec.wustl.edu>.