Водяной знак (Watermark)

function image_create($image_path) {

    $ext = pathinfo($image_path, PATHINFO_EXTENSION);
    switch ($ext) {
        case 'gif':
            $im = imagecreatefromgif($image_path);
            break;
        case 'jpg':
            $im = imagecreatefromjpeg($image_path);
            break;
        case 'png':
            $im = imagecreatefrompng($image_path);
            break;
        default:
            throw new Exception('Неверный формат файла');
    }

    unset($ext);
    return $im;
}

function watermark($image_source, $watermark_source) {
    
    // Проверка на наличие изображений
    if (!file_exists($image_source)) { throw new Exception('Изображение '.$image_source.' не найдено'); }
    if (!file_exists($watermark_source)) { throw new Exception('Изображение '.$watermark_source.' не найдено'); }
    
    $image = image_create($image_source);
    $watermark = image_create($watermark_source);

    // получение размеров картинок
    $size_image = getimagesize($image_source);
    $size_water = getimagesize($watermark_source);

    $img['width']   = $size_image['0'];
    $img['height']  = $size_image['1'];

    $water['width']   = $size_water['0'];
    $water['height']  = $size_water['1'];
    $water['padding'] = 10; // отступ водяного знака

    // позиция водяного знака на картинке
    $final_x = $img['width'] - $water['width'] - $water['padding'];
    $final_y = $img['height'] - $water['width'] - $water['padding'];

    imagecopy($image, $watermark, $final_x, $final_y, 0, 0, $water['width'], $water['height']);
     
    // создание картинки
    imagejpeg($image, 'example.jpg', 80);

    // освобождение памяти
    imagedestroy($image);
    imagedestroy($watermark);
}

// Пример создания миниатюры
watermark('pic.jpg', 'watermark.gif');

Картинка с миниатюрой ниже формируется через код PHP: