Изображение в PHP(часть 3)

08.10.2009 13:57
admin

Хочу привести еще один пример того как можно использовать средства PHP для наложения так называемых водяных знаков(текста) на изображения. Другой пример я приводил в «Изображения в PHP(часть вторая)» Вот пример для файлов c расширениями jpeg, png и gif.

 

<?php
   if(isset($_GET['imagefile']))
  $imagefile= $_GET['imagefile'];	 
  // В переменной $imagefile содержится имя файла с изображением 
  // Если эта переменная пуста, то останавливаем выполнение скрипта
   
  if ($imagefile == "") exit(); 
   
  // Определяем расширение 
  // и в зависимости от него вызываем функции создания изображений из файлов 
  $path_parts = pathinfo($imagefile); 
  $ext = $path_parts["extension"]; 
  switch ($ext) 
  { 
    case "jpg": 
      $img = imagecreatefromjpeg($imagefile); 
      break; 
    case "gif": 
      $img = imagecreatefromgif($imagefile);       
      break;
    case "png": 
      $img = imagecreatefrompng($imagefile);       
      break; 
    default: 
      echo "Неизвестное расширение файла"; 
      exit(); 
  }         
   
  // Если изображение создано   
  if ($img) 
  { 
    // Назначаем цвет 
    $color = imagecolorallocatealpha($img, 0, 255, 0, 50); 
    // Пишем текст поверх изображения 
    $box = imagettftext($img, 50, 0, 10, 150,
           $color, "arbat.ttf", "Торговая марка"); 
    // Выводим изображение в браузер 
    switch ($ext) 
    { 
      case "jpg": 
        header("Content-type: " .image_type_to_mime_type(IMAGETYPE_JPEG)); 
        imagejpeg($img);       
        break; 
      case "gif": 
        header("Content-type: " .image_type_to_mime_type(IMAGETYPE_GIF)); 
        imagegif($img); 
        break;
      case "png": 
        header("Content-type: " .image_type_to_mime_type(IMAGETYPE_PNG)); 
        imagepng($img); 
        break; 
      default: 
        echo "Неизвестное расширение файла"; 
        exit(); 
    }             
  } 
?> 

Далее идет объяснение по каждой функкции.

int imagecolorallocatealpha(resource image, int red,int green, int blue, int alpha)

Функция возвращает идентификатор цвета для изображения image, представленный RGB-компонентами. Полученный идентификатор цвета далее может использоваться для функций рисования. Функция imagecolorallocatealpha() должна вызываться для каждого цвета, используемого при рисовании изображения image.

Параметры red, green, blue — являются RGB компонентами и их значения лежат в диапазоне от 0 до 255 или от 0x00 до 0хFF в шестнадцатеричном формате.

Значения параметра alpha лежат в диапазоне от 0 до 127. Значение alpha = 0 определяет полную непрозрачность. Значение alpha = 127 соответствует полностью прозрачному цвету.

array imagettftext (resource image, int size, int angle, int x, int y, int color, string fontfile, string text)

size — размер шрифта в пикселях.

angle — угол поворота текста. Поворот осуществляется против часовой стрелки. Угол 0 градусов соответствует направлению на 3 часа.

x, y — координаты точки, с которой начинается запись текста. Приблизительно соответствует левому верхнему углу первого символа.

color — идентификатор цвета текста.

font_file — имя файла со шрифтом.

Функция возвращает массив координат 4 вершин прямоугольника, в который будет вписан текст. Вершины перечисляются в следующем порядке: нижняя левая, нижняя правая, верхняя правая, верхняя левая.

Примечание:

Для работы функция требует библиотеку Free Type. Проверить ее наличие можно, выполнив функцию phpinfo(). Сведения о ней будут находиться в разделе gd.

Приведенный в начале статьи скрипт следует записать в отдельный файл, например image.php, а изображение генерировать вызывая этот скрипт из другого файла. Для примера напишем так:

   <img src="http://site.ru/image.php?imagefile=http://site.ru/image.jpg"> 

Где image.jpg изображение на которое необходимо нанести прозрачный текст(водяной знак) с помощью файла image.php. Таким образом в теге <img> пишем обращение к скрипту, которые будет рисовать прозрачный текст поверх изображения. В параметре imagefile передаем имя изображения, на которое нужно наложить текст.

 

( 0 Голосов ) 

    Captcha
    Обновить