Imagine’s coordinates system¶
The coordinate system use by Imagine is very similar to Cartesian Coordinate System, with some exceptions:
- Coordinate system starts at x,y (0,0), which is the top left corner and extends to right and bottom accordingly
- There are no negative coordinates, a point must always be bound to the box its located at, hence 0,0 and greater
- Coordinates of the point are relative its parent bounding box
Classes¶
The whole coordinate system is represented in a handful of classes, but most importantly - its interfaces:
Imagine\Image\PointInterface- represents a single point in a bounding boxImagine\Image\BoxInterface- represents dimensions (width, height)
PointInterface¶
Every coordinate contains the following methods:
->getX()- returns horizontal position of the coordinate->getY()- returns vertical position of a coordinate->in(BoxInterface $box)- returnstrueif current coordinate appears to be inside of a given bounding$box->__toString()- returns string representation of the currentPointInterface, e.g.(0, 0)
Center coordinate¶
It is very well known use case when a coordinate is supposed to represent a center of something.
As part of showing off OO approach to image processing, I added a simple implementation of the core Imagine\Image\PointInterface, which can be found at Imagine\Image\Point\Center. The way it works is simple, it expects and instance of Imagine\Image\BoxInterface in its constructor and calculates the center position based on that.
<?php
$size = new Imagine\Image\Box(50, 50);
$center = new Imagine\Image\Point\Center($size);
var_dump(array(
'x' => $center->getX(),
'y' => $center->getY(),
));
// would output position of (x,y) 25,25
BoxInterface¶
Every box or image or shape has a size, size has the following methods:
->getWidth()- returns integer width->getHeight()- returns integer height->scale($ratio)- returns a newBoxInterfaceinstance with each side multiplied by$ratio->increase($size)- returns a newBoxInterface, with given$sizeadded to each side->contains(BoxInterface $box, PointInterface $start = null)- checks that the given$boxis contained inside the currentBoxInterfaceat$startposition. If no$startposition is given, its assumed to be (0,0)->square()- returns integer square of currentBoxInterface, useful for determining total number of pixels in a box for example->__toString()- returns string representation of the currentBoxInterface, e.g.100x100 px->widen($width)- resizes box to given width, constraining proportions and returns the new box->heighten($height)- resizes box to given height, constraining proportions and returns the new box