Как програмно заокруглить края у картинки

Тема в разделе "PHP", создана пользователем pslava, 18 мар 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    Интересует как можна на пхп реализовать заокругление краев у рисунка, фон заокругление заранее известен
     
  2. jID

    jID Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    106
    Симпатии:
    31
    Первое что приходит в голову - создать 4 картинки закругления (по углам) и наложить функцией imagecopyresampled() на нужный рисунок.

    Хотя можно проще, при выводе картинки в браузере, просто сверху наложить слой с "углами".
     
  3. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    Можна пример?

    Это занимает ресурсы и время и юзвер замечает процес наложения.
    И для этого варианта примерчик тоже было неплохо:)
     
  4. sorcer

    sorcer Создатель

    Регистр.:
    21 фев 2009
    Сообщения:
    35
    Симпатии:
    4
    попробуй это http://www.html.it/articoli/niftycube/index.html
     
  5. jID

    jID Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    106
    Симпатии:
    31
    Код:
    <?
      $img_file="x_e1a08c6c.jpg"; // сама картинка
    
      // в переменную $pic подгрузим картинку, в зависимости от типа файла
      $picinfo=getimagesize($img_file);
      if ($picinfo[2]==1) // gif
        $pic=imagecreatefromgif($img_file);
      if ($picinfo[2]==2) // jpg
        $pic=imagecreatefromjpeg($img_file);
      if ($picinfo[2]==3) // png
        $pic=imagecreatefrompng($img_file);
      // заведём ширину и высоту картинки
      $w=$picinfo[0];
      $h=$picinfo[1];
      
      $corner_width=16; // ширина картинки угла
      $corner_height=16; // высота картинки угла
    
      // право верх
      $c=imagecreatefrompng("c_ru.png");
      imagecopyresampled($pic, $c, ($w-$corner_width), 0, 0, 0, $corner_width, $corner_height, $corner_width, $corner_height);
    
      // право низ
      $c=imagecreatefrompng("c_rd.png");
      imagecopyresampled($pic, $c, ($w-$corner_width), ($h-$corner_height), 0, 0, $corner_width, $corner_height, $corner_width, $corner_height);
    
      // лево верх
      $c=imagecreatefrompng("c_lu.png");
      imagecopyresampled($pic, $c, 0, 0, 0, 0, $corner_width, $corner_height, $corner_width, $corner_height);
    
      // лево низ
      $c=imagecreatefrompng("c_ld.png");
      imagecopyresampled($pic, $c, 0, ($h-$corner_height), 0, 0, $corner_width, $corner_height, $corner_width, $corner_height);
    
      // выводим в браузер
      header("Content-type: image/jpeg");
      imagejpeg($pic);
    ?>
    Картинка "До"
    [​IMG]

    Она же "После"
    [​IMG]

    Файлы c_ld.png, и т.п. представляют из себя .png картинки 16х16 для соответствующих углов.

    Добавлено через 14 минут
    Вот тут вообще на CSS:
    http://www.lezzvie.ru/rb/
     
    pslava нравится это.
  6. Eimantas

    Eimantas Писатель

    Регистр.:
    15 мар 2009
    Сообщения:
    8
    Симпатии:
    0
  7. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    На css не подходит, потмоу что есть возможность что узер бдует наблюдать процес заокругления :D, проще заокруглить раз при заливке и не мучаться.
    Всем спасибо вопрос закрыт.
     
  8. 01ssv

    01ssv Постоялец

    Регистр.:
    29 янв 2008
    Сообщения:
    65
    Симпатии:
    5
    phpthumb, можно посмотреть - накладывать поверх картинки - полупрозрачную png с закругленными краями для фиксированных размеров 100% подойдет, для произвольных не знаю точно.
     
  9. jID

    jID Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    106
    Симпатии:
    31
    Приведённый пример как раз это и делает для произвольных размеров.
     
Статус темы:
Закрыта.