| // +---------------------------------------------------------------------------+ /** * Strategy for overlaying color across image. * * @package SGL * @author Dmitri Lakachauskis */ class SGL_ImageTransform_ColorOverlayStrategy extends SGL_ImageTransformStrategy { function transform() { $aDefaultParams = array( 'align' => 'bottom', 'size' => 10, 'color' => 'white', 'trans' => 0, 'paddingTop' => 0, 'paddingRight' => 0, 'paddingBottom' => 0, 'paddingLeft' => 0 ); $aParams = array_merge($aDefaultParams, $this->aParams); $aPositionParams = $this->calculateValues($aParams); $aParams = array_merge($aParams, $aPositionParams); $aParams['trans'] = 100 - $aParams['trans']; return $this->driver->colorOverlay($aParams); } function calculateValues($aParams) { // calculate values if ('top' == $aParams['align'] || 'bottom' == $aParams['align']) { $overlayFromX = 0; if ($aParams['paddingLeft']) { $overlayFromX = $aParams['paddingLeft']; } $overlayX = $this->driver->img_x; if ($aParams['paddingRight']) { $overlayX -= $aParams['paddingRight'] + $overlayFromX; } $overlayY = $aParams['size'] > $this->driver->img_y ? $this->driver->img_y : $aParams['size']; if ('top' == $aParams['align']) { $overlayFromY = $aParams['paddingTop']; if ($overlayFromY > $overlayY) { $overlayFromY = 0; } } else { $overlayFromY = $this->driver->img_y - ($aParams['paddingBottom'] + $aParams['size']); if ($overlayFromY < 0) { $overlayFromY = $this->driver->img_y - $aParams['size']; } } } elseif ('left' == $aParams['align'] || 'right' == $aParams['align']) { $overlayFromY = 0; if ($aParams['paddingTop']) { $overlayFromY = $aParams['paddingTop']; } $overlayY = $this->driver->img_y; if ($aParams['paddingBottom']) { $overlayY -= $aParams['paddingBottom'] + $overlayFromY; } $overlayX = $aParams['size'] > $this->driver->img_x ? $this->driver->img_x : $aParams['size']; if ('left' == $aParams['align']) { $overlayFromX = $aParams['paddingLeft']; if ($overlayFromX > $overlayX) { $overlayFromX = 0; } } else { $overlayFromX = $this->driver->img_x - ($aParams['paddingRight'] + $aParams['size']); if ($overlayFromX < 0) { $overlayFromX = $this->driver->img_x - $aParams['size']; } } } return array( 'startX' => $overlayFromX, 'width' => $overlayX, 'startY' => $overlayFromY, 'height' => $overlayY ); } } ?>