2009-04-23 3 views
2

HEllo,Php Gd rotate image

Я пытаюсь повернуть круговое изображение вокруг центра, а затем отрезать стороны. Я вижу функцию imagerotate, но она, кажется, не вращается вокруг центра.

У кого-нибудь есть предложения?

спасибо.

Обновление: Поскольку это круг, я хочу отрезать края и сохранить круг в тех же размерах.

+0

Подобно тому, как случайная заметка на полях, PHP вышел с обновлением совсем недавно, что исправляет ошибку безопасности с GD imagerotate ... Просто подумал, что это интересный лакомый. – KyleFarris

ответ

3

documentation говорит, что он делает вращается вокруг центра.

К сожалению, это также говорит о том, что оно масштабирует изображение так, что оно все еще подходит. Это означает, что все, что вы делаете эту функцию, изменит размер вашего внутреннего кругового изображения.

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

Если у вас есть функции «ImageMagick» PHP available, вы можете использовать их вместо этого - они, по-видимому, не масштабируют изображение.

+0

Изменение размера первого и * затем * поворота должно давать изображения лучшего качества. – soulmerge

+0

действительно - да. поворот изображения GD всегда будет уменьшаться, поэтому лучше сначала масштабировать. будет исправлена. – Alnitak

0

В соответствии с PHP вручную imagerotate() страницы:

Центр вращения является центром изображений, и повернутое изображение масштабируется вниз, так что все повернуто изображения помещается в целевом изображении - края не обрезаны.

Возможно, видимый центр изображения не является фактическим центром?

4

я успешно столкнулся с этой проблемой с помощью следующего кода

$width_before = imagesx($img1); 
    $height_before = imagesy($img1); 
    $img1 = imagerotate($img1, $angle, $mycolor); 

    //but imagerotate scales, so we clip to the original size 

    $img2 = @imagecreatetruecolor($width_before, $height_before); 
    $new_width = imagesx($img1); // whese dimensions are 
    $new_height = imagesy($img1);// the scaled ones (by imagerotate) 
    imagecopyresampled(
     $img2, $img1, 
     0, 0, 
     ($new_width-$width_before)/2, 
     ($new_height-$height_before)/2, 
     $width_before, 
     $height_before, 
     $width_before, 
     $height_before 
    ); 
    $img1 = $img2; 
    // now img1 is center rotated and maintains original size 

Надеется, что это помогает.

Bye