Картинка в картинке средствами php

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
Пытаюсь скопировать часть одной картинки на другую

Код: Выделить всё

$res = imagecreate(100,100);
$img = imagecreatefromgif("logo.gif");
imagecopy ($im, $img, 64, 106, 0, 0, 8, 10); 

Но ничего не копируется. Где ошибка?
p.s: В php я нуб!!! )

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
Ошибка в неверных координатах.

Опишу все по порядку, думаю полезно будет многим.

Для начала надо разобраться с используемой плоскостью координат:

01.PNG
На рисунке показано изображение размерами 100х50 и указаны координаты некоторых точек. Началом координат считается левый верхний угол картинки (x=0,y=0). Для примера приведена точка в центре фигуры с координатами x=50,y=25.
Надеюсь по рисунку все понятно, если нет добавляйте вопросы в комментариях - дополню статью.

Теперь вернемся к твоему коду

Код: Выделить всё

$res = imagecreate(100,100);
$img = imagecreatefromgif("logo.gif"); 
тут ты создаешь холст размером 100 на 100 пикселей и подгружаешь некую картинку logo.gif.

Далее ты используешь функцию imagecopy. Думаю не лишним будет сначала рассмотреть ее параметры:

Код: Выделить всё

imagecopy  ( $res, $src, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h  ) 

$res - ресурс холста, на который будем копировать
$src - ресурс картинки, с которой будем копировать
$dst_x, $dst_y - координаты на холсте в которые будем копировать часть второй картинки (или целую)
$src_x, $src_y - координаты точки с которой будем копировать
$src_w, $src_h - ширина и высота области которую будем копировать

т.о. с помощью 4х последних параметров ($src_x, $src_y, $src_w, $src_h) задается прямоугольник на картинке, которуй будет скопирован, а с помощью параметров $dst_x, $dst_y указывается точка куда он будет скопирован.

02.PNG
Допустим нам надо скопировать на картинку размером 100х50 часть с другой картинки размерами 40х30 (см. верхние прямоугольники на картинке. синий прямоугольник это как-раз та часть которую нам надо скопировать).
По картинке понятно, что мы будем копировать прямоугольник с координат 10($src_x) 10($src_y) шириной 30-10=20px ($src_w) высотой 20-10=10px($src_h). Копировать будем в точку 15,15 ($dst_x, $dst_y) обозначенную на первом прямоугольнике.
т.о. получим код

Код: Выделить всё

imagecopy ( $res, $src, 15, 15, 10, 10, 20, 10);  


Теперь вернемся к твоему коду

Код: Выделить всё

imagecopy ( $im, $img, 64, 106, 0, 0, 8, 10);   

03.PNG
получается что ты копируешь в точку 64,106 которая явно выходит за заданные тобой размеры 100х100 и потому ты не видишь никакого результата.

Так что внимательнее проверяй координаты чтобы получить желаемый результат ;)

Надеюсь сумел прояснить все непонятные моменты, если нет жду вопросов в комментариях.

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
вот на этот банер мне надо наложить картинку http://codmk.org.ru/monitor/s_13-sky.png

Вставляю так
$res = imagecreate(160,364);
$img = imagecreatefromgif("rank.gif");
imagecopy ($im, $img, 64, 106, 0, 0, 12, 13);

Размеры банера соответственно 160Х364
Ошибка не в кардинатах точно

и у меня
$im = imagecreatefrompng($bgimg);
$bgimg = "image/{$bgimg}_{$type}.png";

Тоесть фоновая картинка уже есть!

rank.gif соотвецтвенно лежит в одной папке с пхп файлом!
Но не работает!?
p.s: В php я нуб!!! )

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
mkden писал(а):и у меня

Код: Выделить всё

$im = imagecreatefrompng($bgimg);
$bgimg = "image/{$bgimg}_{$type}.png";
при таком порядке на момент создания картинки $bgimg пустая.
поменяй порядок на

Код: Выделить всё

$bgimg = "image/{$bgimg}_{$type}.png";
$im = imagecreatefrompng($bgimg);

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
поменяй порядок на
Код:
$bgimg = "image/{$bgimg}_{$type}.png";
$im = imagecreatefrompng($bgimg);


у меня и так он в таком порядке
Вопрос в другом почему

Код: Выделить всё

$res = imagecreate(160,364);
$img = imagecreatefromgif("rank.gif");
imagecopy ($im, $img, 64, 106, 0, 0, 12, 13);


неработает?
p.s: В php я нуб!!! )

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
что значит "не работает"? добавляй скрины чтоли..
по коду все вроде нормально.

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
http://img821.imageshack.us/img821/1037/s13sky.png

$res = imagecreate(160,364);
$img = imagecreatefromgif("rank.gif");
imagecopy ($im, $img, 64, 106, 0, 0, 12, 13);

соответственно в указонном месте должно появиться изображение rank.gif
p.s: В php я нуб!!! )

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
попробуй закомментировать временно строки добавляющие карту и статистику, т.к. возможно твой "rank" перекрывается ими

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
Спасибо теперь разобрался!)
p.s: В php я нуб!!! )


Вернуться в «Вопросы по программированию»