imagecopy повторно выбран, чтобы изменить размер и обрезать изображение - не возвращая ожидаемый результат - PullRequest
5 голосов
/ 08 января 2011
imagecopyresized ( 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 )

Вот что я хочу сделать: у меня есть изображение размером 600x1000px, и я хочу создать большой палец размером 100x100px после изменения размера этого изображения до 300x500px, координата x для верхней левой точки большого пальцаквадрат должен быть в 100 (src x) и 120 (src y).

Согласно тому, что я понимаю из руководства, команда должна быть

$dst_image = imagecreatetruecolor(100,100);
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg');
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, **300 , 500 , 600 , 1000** )

Это обрезка изображения простохорошо, но он не меняет размер правильно.Я никогда не получал, чтобы это соответствовало тому, что я вижу в моем редакторе изображений (GIMP).Что я делаю неправильно?Я подтвердил, что все цифры верны, но они всегда сдвигаются вверх или вниз независимо от того, что я делаю.

Ответы [ 2 ]

10 голосов
/ 08 января 2011

Вот ссылка на функцию, которую я написал, используя PHP GD, чтобы изменить размер изображения любого размера до любого произвольного размера. В нем есть объяснение и варианты использования обрезки по размеру или почтового ящика, чтобы соответствовать целевому соотношению сторон.

http://www.spotlesswebdesign.com/blog.php?id=1

обновление

это должно выглядеть больше так.

$dst_image = imagecreatetruecolor(100,100);
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg');
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, 100, 100, 400, 400);

берет квадрат 400х400 у источника и копирует его в квадрат 100х100 в пункте назначения. верхний левый угол исходного квадрата - 100 x и 120 y. x и y представляют количество пикселей из верхнего левого угла.

3 голосов
/ 08 января 2011

Да, это хорошо исправлено.

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

imagecopyresized ($dst_image, $src_image, 0, 0, 200, 240, 100, 100, 200, 200);

Таким образом, переменные на самом деле означают следующее: $ src_x = x координата верхней левой точки квадрата в оригинале. Поскольку оригинал в два раза больше версии с измененным размером, из которой должен быть извлечен большой палец, это будет 200 ((original_width / resized_width) * x).

$ src_y = то же самое, но с координатой y.

$ dst_w = ширина созданного эскиза - 100.

$ dst_h = высота созданного эскиза - 100.

$ src_w = ширина области, которую я буду обрезать от оригинала ((original_width / resized_width) * $ dst_w)

$ src_h = высота области, которую я буду обрезать от оригинала ((original_width / resized_width) * $ dst_h)


dqhendricks: Большое спасибо за вашу помощь, я действительно ценю это. Я часами чесал голову над этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...