From e1be08f626a9771bdf3a2f9157190e91e421180e Mon Sep 17 00:00:00 2001 From: maPer77 Date: Thu, 22 Oct 2020 13:07:58 -0300 Subject: [PATCH] Refactor 'overlay()' (#264) * 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 --- src/claviska/SimpleImage.php | 62 ++++++++++++------------------------ 1 file changed, 21 insertions(+), 41 deletions(-) diff --git a/src/claviska/SimpleImage.php b/src/claviska/SimpleImage.php index b3de6c4..6226e64 100644 --- a/src/claviska/SimpleImage.php +++ b/src/claviska/SimpleImage.php @@ -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,