Skip to content

Commit

Permalink
Refactor 'overlay()' (#264)
Browse files Browse the repository at this point in the history
* Adds $ borderOffset parameter to overlay ().
Calculates the offset for the image edges.

* Use $calcuateOffsetFromEdge in "overlay()".
Update doc

* Cleaner code for 'overlay()'

Co-authored-by: Cory LaViska <[email protected]>
  • Loading branch information
maPer77 and claviska authored Oct 22, 2020
1 parent d9234da commit e1be08f
Showing 1 changed file with 21 additions and 41 deletions.
62 changes: 21 additions & 41 deletions src/claviska/SimpleImage.php
Original file line number Diff line number Diff line change
Expand Up @@ -713,53 +713,33 @@ public function maxColors($max, $dither = true) {
*/
public function overlay($overlay, $anchor = 'center', $opacity = 1, $xOffset = 0, $yOffset = 0, $calcuateOffsetFromEdge = false) {
// Load overlay image
if(!($overlay instanceof SimpleImage)) {
$overlay = new SimpleImage($overlay);
}
if(!($overlay instanceof SimpleImage)) $overlay = new SimpleImage($overlay);

// Convert opacity
$opacity = self::keepWithin($opacity, 0, 1) * 100;

// Determine placement
switch($anchor) {
case 'top left':
$x = $xOffset;
$y = $yOffset;
break;
case 'top right':
$x = $this->getWidth() - $overlay->getWidth() + ($calcuateOffsetFromEdge ? -$xOffset : $xOffset);
$y = $yOffset;
break;
case 'top':
$x = ($this->getWidth() / 2) - ($overlay->getWidth() / 2) + ($calcuateOffsetFromEdge ? 0 : $xOffset);
$y = $yOffset;
break;
case 'bottom left':
$x = $xOffset;
$y = $this->getHeight() - $overlay->getHeight() + ($calcuateOffsetFromEdge ? -$yOffset : $yOffset);
break;
case 'bottom right':
$x = $this->getWidth() - $overlay->getWidth() + ($calcuateOffsetFromEdge ? -$xOffset : $xOffset);
$y = $this->getHeight() - $overlay->getHeight() + ($calcuateOffsetFromEdge ? -$yOffset : $yOffset);
break;
case 'bottom':
$x = ($this->getWidth() / 2) - ($overlay->getWidth() / 2) + ($calcuateOffsetFromEdge ? 0 : $xOffset);
$y = $this->getHeight() - $overlay->getHeight() + ($calcuateOffsetFromEdge ? -$yOffset : $yOffset);
break;
case 'left':
$x = $xOffset;
$y = ($this->getHeight() / 2) - ($overlay->getHeight() / 2) + ($calcuateOffsetFromEdge ? 0 : $yOffset);
break;
case 'right':
$x = $this->getWidth() - $overlay->getWidth() + ($calcuateOffsetFromEdge ? -$xOffset : $xOffset);
$y = ($this->getHeight() / 2) - ($overlay->getHeight() / 2) + ($calcuateOffsetFromEdge ? 0 : $yOffset);
break;
default:
$x = ($this->getWidth() / 2) - ($overlay->getWidth() / 2) + ($calcuateOffsetFromEdge ? 0 : $xOffset);
$y = ($this->getHeight() / 2) - ($overlay->getHeight() / 2) + ($calcuateOffsetFromEdge ? 0 : $yOffset);
break;
// Get available space
$spaceX = $this->getWidth() - $overlay->getWidth();
$spaceY = $this->getHeight() - $overlay->getHeight();

// Set default center
$x = ($spaceX / 2) + ($calcuateOffsetFromEdge ? 0 : $xOffset);
$y = ($spaceY / 2) + ($calcuateOffsetFromEdge ? 0 : $yOffset);

// Determine if top|bottom
if (strpos($anchor, 'top') !== false) {
$y = $yOffset;
} elseif (strpos($anchor, 'bottom') !== false) {
$y = $spaceY + ($calcuateOffsetFromEdge ? -$yOffset : $yOffset);
}

// Determine if left|right
if (strpos($anchor, 'left') !== false) {
$x = $xOffset;
} elseif (strpos($anchor, 'right') !== false) {
$x = $spaceX + ($calcuateOffsetFromEdge ? -$xOffset : $xOffset);
}

// Perform the overlay
self::imageCopyMergeAlpha(
$this->image,
Expand Down

0 comments on commit e1be08f

Please sign in to comment.