@EVOSandru6

Как сделать полупрозрачный водяной знак средствами библиотеки CImageHandler в yii1?

Добрый день,

При загрузке изображения накладываю на него полупрозрачный png водной знак, но по какой то причине - вся прозрачная подложка становится белым прямоугольником,

// в поведении загрузки изоражения
public function createWM($image) {
        Yii::app()->ih
            ->load($image)
            ->watermark($_SERVER['DOCUMENT_ROOT'] .
                '/images/wm.png',
                10,
                20,
                CImageHandler::CORNER_RIGHT_TOP)
            ->save($image);
    }


По цепочке вызывается метод watermark класса CImageHandler

public function watermark($watermarkFile, $offsetX, $offsetY, $corner = self::CORNER_RIGHT_BOTTOM, $zoom = false)
	{

		$this->checkLoaded();

		if ($wImg = $this->loadImage($watermarkFile))
		{

			$posX = 0;
			$posY = 0;
                        
			$watermarkWidth = $wImg['width'];
			$watermarkHeight = $wImg['height'];

			if($zoom !== false)
			{
				$dimension = round(max($this->width, $this->height) * $zoom);

				$watermarkHeight = $dimension;
				$watermarkWidth = round($watermarkHeight / $wImg['height'] * $wImg['width']);

				if($watermarkWidth > $dimension)
				{
					$watermarkWidth = $dimension;
					$watermarkHeight = round($watermarkWidth / $wImg['width'] * $wImg['height']);
				}
			}

			switch ($corner)
			{
				case self::CORNER_LEFT_TOP:
					$posX = $offsetX;
					$posY = $offsetY;
					break;
				case self::CORNER_RIGHT_TOP:
					$posX = $this->width - $watermarkWidth - $offsetX;
					$posY = $offsetY;
					break;
				case self::CORNER_LEFT_BOTTOM:
					$posX = $offsetX;
					$posY = $this->height - $watermarkHeight - $offsetY;
					break;
				case self::CORNER_RIGHT_BOTTOM:
					$posX = $this->width - $watermarkWidth - $offsetX;
					$posY = $this->height - $watermarkHeight - $offsetY;
					break;
				case self::CORNER_CENTER:
					$posX = floor(($this->width - $watermarkWidth) / 2);
					$posY = floor(($this->height - $watermarkHeight) / 2);
					break;
				default:
					throw new Exception('Invalid $corner value');
			}

			imagecopyresampled(
				$this->image,
				$wImg['image'],
				$posX,
				$posY,
				0,
				0,
				$watermarkWidth,
				$watermarkHeight,
				$wImg['width'],
				$wImg['height']
			);


			imagedestroy($wImg['image']);

			return $this;
		}
		else
		{
			return false;
		}
	}


Подскажите где я накосорезил?
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы