Как правильно повернуть изображение в php?

Я использую функцию imagerotate(), чтобы повернуть изображение ниже на угол 30 градусов.

http://postimage.org/image/b7w6dacel/

Проблема в том, что всякий раз, когда я поворачиваю изображение и сохраняю его по новому пути, на новом пути изображение поворачивается, но вокруг него черный цвет, как показано ниже.

http://postimage.org/image/n3n1vtr9p/8501961e/

Исходное изображение 450*340, а после поворота изображение становится 560*520. Кто-нибудь знает, что я делаю не так. Взгляните на мой исходный код ниже. Спасибо.

$filename =  "static\\". $sessionid . "-1.jpg";
$file= $sessionid . "-1.jpg";
$ir = imagecreatefromjpeg($filename);
$degrees = 30;
$flip=imagerotate($ir, $degrees, 0);
$rotated=imagejpeg($flip, 'c:\\xampp\\htdocs\\'. $file);

person user875139    schedule 21.04.2012    source источник
comment
Это выглядит как ожидаемое поведение для меня. Что, как вы ожидали, произойдет?   -  person Halcyon    schedule 21.04.2012
comment
я хотел, чтобы изображение повернулось без увеличения размера. Потому что повернутое изображение выглядит как совершенно новое изображение с черным цветом вокруг него.   -  person user875139    schedule 21.04.2012
comment
Так обрезать? Имейте в виду, что результат будет меньше оригинала, если вы не хотите, чтобы отображался некоторый «фон».   -  person Halcyon    schedule 21.04.2012
comment
Ограничительная рамка вокруг прямоугольного изображения, повернутого на ноль градусов, имеет тот же размер, что и оригинал, однако ограничивающая рамка вокруг прямоугольного изображения, повернутого на значение, не кратное 180 градусам (или 90 градусов для квадратных изображений), всегда будет больше. .   -  person halfer    schedule 21.04.2012
comment
Кроме того, не забывайте, что вы можете преобразовать это в PNG и установить прозрачный фон.   -  person halfer    schedule 21.04.2012


Ответы (1)


В зависимости от того, насколько сильно вы его повернете, новое изображение будет больше исходного. Вам придется масштабировать или обрезать новое изображение. Этот код будет масштабировать $oldImage до $newWidth и $newHeigth.

$newImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($newImage, $oldImage, 0, 0, 0, 0, $newWidth, $newHeight, imagesx($oldImage), imagesy($oldImage));

Надеюсь это поможет.

person Joel    schedule 21.04.2012