function WatermarkOverlay(&$gdimg_dest, &$img_watermark, $alignment = '*', $opacity = 50, $margin_x = 5, $margin_y = null) { if (is_resource($gdimg_dest) && is_resource($img_watermark)) { $watermark_source_x = 0; $watermark_source_y = 0; $img_source_width = ImageSX($gdimg_dest); $img_source_height = ImageSY($gdimg_dest); $watermark_source_width = ImageSX($img_watermark); $watermark_source_height = ImageSY($img_watermark); $watermark_opacity_percent = max(0, min(100, $opacity)); $margin_y = is_null($margin_y) ? $margin_x : $margin_y; $watermark_margin_x = $margin_x > 0 && $margin_x < 1 ? round((1 - $margin_x) * $img_source_width) : $margin_x; $watermark_margin_y = $margin_y > 0 && $margin_y < 1 ? round((1 - $margin_y) * $img_source_height) : $margin_y; if (preg_match('#^([0-9\\.\\-]*)x([0-9\\.\\-]*)$#i', $alignment, $matches)) { $watermark_destination_x = intval($matches[1]); $watermark_destination_y = intval($matches[2]); } else { switch ($alignment) { case '*': if ($gdimg_tiledwatermark = phpThumb_functions::ImageCreateFunction($img_source_width, $img_source_height)) { ImageAlphaBlending($gdimg_tiledwatermark, false); ImageSaveAlpha($gdimg_tiledwatermark, true); $text_color_transparent = phpThumb_functions::ImageColorAllocateAlphaSafe($gdimg_tiledwatermark, 255, 0, 255, 127); ImageFill($gdimg_tiledwatermark, 0, 0, $text_color_transparent); // set the tiled image transparent color to whatever the untiled image transparency index is // ImageColorTransparent($gdimg_tiledwatermark, ImageColorTransparent($img_watermark)); // a "cleaner" way of doing it, but can't handle the margin feature :( // ImageSetTile($gdimg_tiledwatermark, $img_watermark); // ImageFill($gdimg_tiledwatermark, 0, 0, IMG_COLOR_TILED); // break; // ImageFill($gdimg_tiledwatermark, 0, 0, ImageColorTransparent($gdimg_tiledwatermark)); // tile the image as many times as can fit for ($x = $watermark_margin_x; $x < $img_source_width + $watermark_source_width; $x += $watermark_source_width + $watermark_margin_x) { for ($y = $watermark_margin_y; $y < $img_source_height + $watermark_source_height; $y += $watermark_source_height + $watermark_margin_y) { ImageCopy($gdimg_tiledwatermark, $img_watermark, $x, $y, 0, 0, min($watermark_source_width, $img_source_width - $x - $watermark_margin_x), min($watermark_source_height, $img_source_height - $y - $watermark_margin_y)); } } $watermark_source_width = ImageSX($gdimg_tiledwatermark); $watermark_source_height = ImageSY($gdimg_tiledwatermark); $watermark_destination_x = 0; $watermark_destination_y = 0; ImageDestroy($img_watermark); $img_watermark = $gdimg_tiledwatermark; } break; case 'T': $watermark_destination_x = round($img_source_width / 2 - $watermark_source_width / 2 + $watermark_margin_x); $watermark_destination_y = $watermark_margin_y; break; case 'B': $watermark_destination_x = round($img_source_width / 2 - $watermark_source_width / 2 + $watermark_margin_x); $watermark_destination_y = $img_source_height - $watermark_source_height - $watermark_margin_y; break; case 'L': $watermark_destination_x = $watermark_margin_x; $watermark_destination_y = round($img_source_height / 2 - $watermark_source_height / 2 + $watermark_margin_y); break; case 'R': $watermark_destination_x = $img_source_width - $watermark_source_width - $watermark_margin_x; $watermark_destination_y = round($img_source_height / 2 - $watermark_source_height / 2 + $watermark_margin_y); break; case 'C': $watermark_destination_x = round($img_source_width / 2 - $watermark_source_width / 2); $watermark_destination_y = round($img_source_height / 2 - $watermark_source_height / 2); break; case 'TL': $watermark_destination_x = $watermark_margin_x; $watermark_destination_y = $watermark_margin_y; break; case 'TR': $watermark_destination_x = $img_source_width - $watermark_source_width - $watermark_margin_x; $watermark_destination_y = $watermark_margin_y; break; case 'BL': //echo '<pre>'; ////var_dump($watermark_destination_x); ////var_dump($watermark_destination_y); //var_dump($watermark_margin_x); //var_dump($img_source_height); //var_dump($watermark_source_height); //var_dump($watermark_margin_y); $watermark_destination_x = $watermark_margin_x; $watermark_destination_y = $img_source_height - $watermark_source_height - $watermark_margin_y; break; case 'BR': default: $watermark_destination_x = $img_source_width - $watermark_source_width - $watermark_margin_x; $watermark_destination_y = $img_source_height - $watermark_source_height - $watermark_margin_y; break; } } ImageAlphaBlending($gdimg_dest, false); ImageSaveAlpha($gdimg_dest, true); ImageSaveAlpha($img_watermark, true); phpThumb_functions::ImageCopyRespectAlpha($gdimg_dest, $img_watermark, $watermark_destination_x, $watermark_destination_y, 0, 0, $watermark_source_width, $watermark_source_height, $watermark_opacity_percent); return true; } return false; }
$phpThumb->phpThumbDebug(); } //////////////////////////////////////////////////////////////// if ($phpThumb->rawImageData) { // great } elseif (!empty($_GET['new'])) { // generate a blank image resource of the specified size/background color/opacity if ($phpThumb->w <= 0 || $phpThumb->h <= 0) { $phpThumb->ErrorImage('"w" and "h" parameters required for "new"'); } @(list($bghexcolor, $opacity) = explode('|', $_GET['new'])); if (!phpThumb_functions::IsHexColor($bghexcolor)) { $phpThumb->ErrorImage('BGcolor parameter for "new" is not valid'); } $opacity = strlen($opacity) ? $opacity : 100; if ($phpThumb->gdimg_source = phpThumb_functions::ImageCreateFunction($phpThumb->w, $phpThumb->h)) { $alpha = (100 - min(100, max(0, $opacity))) * 1.27; if ($alpha) { $phpThumb->setParameter('is_alpha', true); ImageAlphaBlending($phpThumb->gdimg_source, false); ImageSaveAlpha($phpThumb->gdimg_source, true); } $new_background_color = phpThumb_functions::ImageHexColorAllocate($phpThumb->gdimg_source, $bghexcolor, false, $alpha); ImageFilledRectangle($phpThumb->gdimg_source, 0, 0, $phpThumb->w, $phpThumb->h, $new_background_color); } else { $phpThumb->ErrorImage('failed to create "new" image (' . $phpThumb->w . 'x' . $phpThumb->h . ')'); } } elseif (!$phpThumb->src) { $phpThumb->ErrorImage('Usage: ' . $_SERVER['PHP_SELF'] . '?src=/path/and/filename.jpg' . "\n" . 'read Usage comments for details'); } elseif (preg_match('#^(f|ht)tp\\://#i', $phpThumb->src)) { $phpThumb->DebugMessage('$phpThumb->src (' . $phpThumb->src . ') is remote image, attempting to download', __FILE__, __LINE__);