public function writeWatermarkInfo(&$sourcefileId, $thumbnailMode, CacheFile $cacheFile) { if (!$this->config->isUsedWatermark() || $thumbnailMode) { return; } static $disable_alpha_warning; $watermarkfile = $this->config->getWatermarkFile(); $align = $this->config->getWatermarkLeft(); $valign = $this->config->getWatermarkTop(); if ($this->config->getWatermarkTransparencyType() == 'alpha') { $transcolor = FALSE; } else { $transcolor = $this->config->getWatermarkTransparentColor(); } $transparency = $this->config->getWatermarkTransparency(); try { $watermarkfile_id = $this->loadWatermarkFile($watermarkfile); } catch (Exception $e) { return false; } @imageAlphaBlending($watermarkfile_id, false); $result = @imageSaveAlpha($watermarkfile_id, true); if (!$result) { if (!$disable_alpha_warning) { $msg = "Watermark problem: your server does not support alpha blending (requires GD 2.0.1+)"; JLog::add($msg, JLog::WARNING); } $disable_alpha_warning = true; imagedestroy($watermarkfile_id); return false; } $offset_w = $cacheFile->offsetX(); $offset_h = $cacheFile->offsetY(); $w = $cacheFile->displayWidth(); $h = $cacheFile->displayHeight(); $watermarkfileWidth = imageSX($watermarkfile_id); $watermarkfileHeight = imageSY($watermarkfile_id); $watermarkOffsetX = $this->calcXOffsetForWatermark($align, $watermarkfileWidth, $offset_w, $w); $watermarkOffsetY = $this->calcYOffsetForWatermark($valign, $watermarkfileHeight, $offset_h, $h); $fileType = strtolower(pathinfo($watermarkfile, PATHINFO_EXTENSION)); $sourcefileId = $this->upsampleImageIfNecessary($fileType, $sourcefileId); if ($transcolor !== false) { $transcolAsInt = intval(str_replace('#', '', $transcolor), 16); imagecolortransparent($watermarkfile_id, $transcolAsInt); // use transparent color imagecopymerge($sourcefileId, $watermarkfile_id, $watermarkOffsetX, $watermarkOffsetY, 0, 0, $watermarkfileWidth, $watermarkfileHeight, $transparency); } else { imagecopy($sourcefileId, $watermarkfile_id, $watermarkOffsetX, $watermarkOffsetY, 0, 0, $watermarkfileWidth, $watermarkfileHeight); // True // alphablend } imagedestroy($watermarkfile_id); return true; }