Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Наложение изображений GD
 
 автор: chexov   (09.06.2011 в 05:13)   письмо автору
3 Кб
 
 

Доброго времени суток.

Возникла проблема по наложению изображений друг на друга

в Attache имеются 3 изображения DESC.gif, LINE.gif, WATER.gif

Необходимо вывести в браузер DESC.gif(подложку), на него LINE.gif (шкалу), а WATER.gif это линия которую надо растягивать от синей границы DESC.gif до случайной высоты, которая генерируется рандомно

делаю так:
<?
$im 
imagecreatefromgif('desc.gif');
$stamp1 imagecreatefromgif('line.gif');
$stamp2 imagecreatefromgif('water.gif');
//Генерируем высоту
$marge_bottom mt_rand(5,100);
//накладываем отметку
$sx2 imagesx($stamp2);
$sy2 imagesy($stamp2);
imagecopy($im$stamp2imagesx($im) - $sx2imagesy($im) - $sy2 $marge_bottom00imagesx($stamp2), imagesy($stamp2));
//накладываем шкалу
$sx imagesx($stamp1);
$sy imagesy($stamp1);
imagecopy($im$stamp1imagesx($im)-$sximagesy($im)-$sy00imagesx($stamp1), imagesy($stamp1));
//Выводим в браузер
header('content-type: image/gif');
imagegif($im''90);
imagedestroy($im);

?>


Дальше ступор, как растянуть изображение water.gif по рандомной координате Y, чтобы он растягивался от синей границы, до этой координаты (т.е визуально как бы заполнял подложку от и до)?

  Ответить  
 
 автор: cheops   (09.06.2011 в 10:04)   письмо автору
 
   для: chexov   (09.06.2011 в 05:13)
 

Лучше water.gif сделать шириной высотой в 20px или сколько занимает вода и растягивать от нужной точки на нужную высоту. Это потребует вычислений, но в текущей ситуации их потребуется еще больше, так как нужно вырезать этот кусочек из большого изображения, прежде чем им манипулировать.
Другой подход связан с изображением с водой на полную высоту, тогда растягивать ничего не придется, будет достаточно просто регулировать высоту водного прямоугольника.

  Ответить  
 
 автор: chexov   (09.06.2011 в 10:16)   письмо автору
858 байт
 
   для: cheops   (09.06.2011 в 10:04)
 

алгоритм понятен, не хватает практических навыков, если не затруднит, покажите как это сделать?

З.Ы: я так понял, необходимо нарисовать прямоугольник WATER.gif размерами как у подложки, и уменьшать его?

  Ответить  
 
 автор: cheops   (09.06.2011 в 10:24)   письмо автору
 
   для: chexov   (09.06.2011 в 10:16)
 

С таким изображением, когда у вас углы ничего не сделать... здесь как в HTML-верстке нужен либо чистый столбик воды без всего остального оформления, либо небольшой столбик из середины, без границ.

  Ответить  
 
 автор: chexov   (09.06.2011 в 10:25)   письмо автору
473 байт
 
   для: cheops   (09.06.2011 в 10:24)
 

сделал чистый столбик

  Ответить  
 
 автор: cheops   (09.06.2011 в 11:02)   письмо автору
1.1 Кб
 
   для: chexov   (09.06.2011 в 05:13)
 

Во вложении находится файл column.gif, вот решение с его участием
<?php 
  $im 
imagecreatefromgif('desc.gif'); 
  
$stamp1 imagecreatefromgif('line.gif'); 
  
$water imagecreatefromgif('column.gif'); 
  
//Генерируем высоту 
  
$marge_bottom mt_rand(5,100); 
  
// Вычисляем ширину и высоту примера водяного
  // столбика
  
$width imagesx($water);
  
$height imagesy($water);
  
// Вычисляем растянутый водяной столбик
  
$newwidth imagesx($water);
  
$newheight imagesy($water) + imagesy($im) - $marge_bottom 12;
  
// Накладываем водяной столбик
  
imagecopyresized($im$water0$marge_bottom00
  
$newwidth$newheight$width$height); 
  
// накладываем шкалу 
  
$sx imagesx($stamp1); 
  
$sy imagesy($stamp1); 
  
imagecopy($im$stamp1imagesx($im)-$sximagesy($im)-$sy00,
  
imagesx($stamp1), imagesy($stamp1)); 
  
//Выводим в браузер 
  
header('content-type: image/gif'); 
  
imagegif($im''90); 
  
imagedestroy($im);
?>

  Ответить  
 
 автор: chexov   (09.06.2011 в 12:02)   письмо автору
 
   для: cheops   (09.06.2011 в 11:02)
 

Огромное спасибо Хеопс, теперь понял куда копать

  Ответить  
 
 автор: chexov   (10.06.2011 в 04:53)   письмо автору
 
   для: chexov   (09.06.2011 в 12:02)
 

А возможно ли разделить изображение ШКАЛЫ, LINE.gif на красную зону и черную, и чтобы красная зона была как ссылка? просто возникла идея, при нажатии на красную зону выводить каментарий... возможно ли это?

  Ответить  
 
 автор: cheops   (10.06.2011 в 11:57)   письмо автору
 
   для: chexov   (10.06.2011 в 04:53)
 

Хм... ну это уже средствами HTML/CSS/JavaScript нужно решать, составлять карту изображения. Или как вариант ориентироваться на flash.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования