Помогите с imagecopyresampled

A
На сайте с 10.05.2008
Offline
48
1717

Добрый день. Никак не могу настроить вырезку изображения при помощи imagecopyresampled.

вот код:


$parametr1='500';

$parametr2='333';

$plik='castle.jpg';

$nowy='plk';

$zdjecie=imagecreatefromjpeg($plik);



$nowy_plik=imagecreatetruecolor($width,$height);

imagecopyresampled($nowy_plik,$zdjecie,$x1,$y1,$x2,$y2,$width,$height,$parametr1,$parametr2);

переменные $x1,$y1,$x2,$y2,$width,$height передаются через POST. К примеру, значения такие:

70-71-346-231-276-160

Размер исходной картинки 500х333. Но на выходе получается следующее:

Вот исходное изображение:

Что я упустил? Спасибо заранее.

скрипт автопортала (http://autocrimea.info/) - для приобретения стучите в личку
HapKOTuK
На сайте с 23.08.2007
Offline
30
#1
also:
Добрый день. Никак не могу настроить вырезку изображения при помощи imagecopyresampled.
вот код:

$parametr1='500';

$parametr2='333';

$plik='castle.jpg';

$nowy='plk';

$zdjecie=imagecreatefromjpeg($plik);



$nowy_plik=imagecreatetruecolor($width,$height);

imagecopyresampled($nowy_plik,$zdjecie,$x1,$y1,$x2,$y2,$width,$height,$parametr1,$parametr2);

переменные $x1,$y1,$x2,$y2,$width,$height передаются через POST. К примеру, значения такие:
70-71-346-231-276-160
Размер исходной картинки 500х333. Но на выходе получается следующее:

Вот исходное изображение:

Что я упустил? Спасибо заранее.

bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )

dst_x, dst_y, dst_w, dst_h - задают прямоугольную область куда нужно копировать

src_x, src_y, src_w, src_h - задают прямоугольную область в картинке оригинала откуда надо копировать,

_x, _y - это координата точки левого верхнего угла

_w, _h - это НЕ КООРДИНАТА, это смещение от левого верхнего угла.

В вышем случае, если вы хотите сделать просто уменьшенную версию оригинальной картинки, вам нужно

src_x, src_y, dst_x, dst_y - установить в ноль

src_w, src_h - размер оригинальной картинки

dst_w, dst_h - размер превью

остально оно сделает само %)

А что поправить, думаю, поймёте сами :)

Не будь слишком требователен к себе - будешь неудовлетворен. Не будь слишком требовательным к другим - разочаруешься.
A
На сайте с 10.05.2008
Offline
48
#2
HapKOTuK:
bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )

dst_x, dst_y, dst_w, dst_h - задают прямоугольную область куда нужно копировать
src_x, src_y, src_w, src_h - задают прямоугольную область в картинке оригинала откуда надо копировать,

_x, _y - это координата точки левого верхнего угла
_w, _h - это НЕ КООРДИНАТА, это смещение от левого верхнего угла.

В вышем случае, если вы хотите сделать просто уменьшенную версию оригинальной картинки, вам нужно
src_x, src_y, dst_x, dst_y - установить в ноль
src_w, src_h - размер оригинальной картинки
dst_w, dst_h - размер превью

остально оно сделает само %)

А что поправить, думаю, поймёте сами :)

Мне нужен не ресайз, а именно вырезание.

Честно сказать - уже всю ночь курил маны, но так и не допер, где прошляпил.. Подскажите, плз, если не сложно.. :(

Чтобы было понятней, о чем я, вот пример работы:

http://up-image.ru/crop/tests/1.php

HapKOTuK
На сайте с 23.08.2007
Offline
30
#3
also:
Мне нужен не ресайз, а именно вырезание.
Честно сказать - уже всю ночь курил маны, но так и не допер, где прошляпил.. Подскажите, плз, если не сложно.. :(

Проблема-то в чём?

Допустим У нас есть картинка 500х500 ($src) и нам надо вырезать у неё прямоугольник в 98х99 пикселей начиная с координаты 51, 52 и сунуть в картинку ($dst) 98х99 пикселей

bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )

Делается это так:

imagecopyresampled (

$dst,

$src,

0 (координата Х левого верхнего угла прямоугольника в целевой картинке),

0 (координата У левого верхнего угла прямоугольника в целевой картинке),

51 (координата Х левого верхнего угла прямоугольника в исходной картинке),

51 (............... У .................... ),

98 (ширина прямоугольника в целевой картинке),

99 (высота ............),

98 (ширина прямоугольника в оригинальной картинке),

99 (высота.....)

);

Объясню как оно работает еще раз :)

Мы задаём два прямоугольника (_x, _y, _w, _h) прямоугольник SRC и прямоугольник DST.

А потом функция берет все пиксели прямоугольника SRC и ресайзит в прямоугольник DST.

Соответственно если src_w == dst_w && src_h == dst_h - то ресайза не будет, т.к. прямоугольники имеют одинаковый размер, а будет просто кроп.

Понятно? :)

A
На сайте с 10.05.2008
Offline
48
#4
HapKOTuK:
Проблема-то в чём?

Допустим У нас есть картинка 500х500 ($src) и нам надо вырезать у неё прямоугольник в 98х99 пикселей начиная с координаты 51, 52 и сунуть в картинку ($dst) 98х99 пикселей

bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )

Делается это так:
imagecopyresampled (
$dst,
$src,
0 (координата Х левого верхнего угла прямоугольника в целевой картинке),
0 (координата У левого верхнего угла прямоугольника в целевой картинке),
51 (координата Х левого верхнего угла прямоугольника в исходной картинке),
51 (............... У .................... ),
98 (ширина прямоугольника в целевой картинке),
99 (высота ............),
98 (ширина прямоугольника в оригинальной картинке),
99 (высота.....)
);

Объясню как оно работает еще раз :)

Мы задаём два прямоугольника (_x, _y, _w, _h) прямоугольник SRC и прямоугольник DST.
А потом функция берет все пиксели прямоугольника SRC и ресайзит в прямоугольник DST.
Соответственно если src_w == dst_w && src_h == dst_h - то ресайза не будет, т.к. прямоугольники имеют одинаковый размер, а будет просто кроп.

Понятно? :)

Подставил Ваши значения - то же самое. С нулевыми координатами ресайзит правильно, но нужен не ресайз (

skAmZ
На сайте с 04.09.2009
Offline
122
#5


$nowy_plik=imagecreatetruecolor($x2-$x1,$y2-$y1);
imagecopyresampled($nowy_plik,$zdjecie,0,0,$x1,$y1, $x2-$x1,$y2-$y1, $x2-$x1,$y2-$y1 );
A
На сайте с 10.05.2008
Offline
48
#6
skAmZ:

$nowy_plik=imagecreatetruecolor($x2-$x1,$y2-$y1);
imagecopyresampled($nowy_plik,$zdjecie,0,0,$x1,$y1, $x2-$x1,$y2-$y1, $x2-$x1,$y2-$y1 );

Спасибо огромное, все получилось!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий