ScotlandPHP 2016

Imagick::rotateImage

(PECL imagick 2.0.0)

Imagick::rotateImageTourne une image

Description

bool Imagick::rotateImage ( mixed $background , float $degrees )

Tourne une image d'un nombre de degrés spécifié par degrees. Les triangles vides ainsi créés sont remplis avec la couleur de fond.

Liste de paramètres

background

La couleur de fond

degrees

Angle de rotation, en degrés. L'angle de rotation est interprété comme le nombre de dégrés pour la rotation dans le sens des aiguilles d'une montre.

Valeurs de retour

Retourne TRUE en cas de succès.

Historique

Version Description
2.1.0 Permet désormais l'utilisation d'une chaîne pour représenter la couleur. Les versions précédentes ne permettaient que les objets ImagickPixel.

Exemples

Exemple #1 Exemple avec Imagick::rotateImage()

<?php
function rotateImage($imagePath$angle$color) {
    
$imagick = new \Imagick(realpath($imagePath));
    
$imagick->rotateimage($color$angle);
    
header("Content-Type: image/jpg");
    echo 
$imagick->getImageBlob();
}

?>

add a note add a note

User Contributed Notes 5 notes

up
2
AlexG
3 years ago
Transparent

<?php $im->rotateImage(new ImagickPixel('#00000000'), 75); ?>
up
1
Anonymous
4 months ago
The degrees for imagick and gd is difference!
GD > rotate 90 means counter clockwise.
Imagick > rotate 90 means clockwise.

GD 90 = Imagick 270 or Imagick 90 = GD 270.

Use this function.

<?php
function calculateCounterClockwise($value)
{
    if (
$value == 0 || $value == 180) {
        return
$value;
    }
    if (
$value < 0 || $value > 360) {
       
$value = 90;
    }

   
$total_degree = 360;
   
$output = intval($total_degree-$value);
    return
$output;
}
// calculateCounterClockwise

echo '1 = '.calculateCounterClockwise(1).'<br>';
echo
'90 = '.calculateCounterClockwise(90).'<br>';
echo
'270 = '.calculateCounterClockwise(270).'<br>';
echo
'359 = '.calculateCounterClockwise(359).'<br>';
echo
'360 = '.calculateCounterClockwise(360).'<br>';
?>

test results:
1 = 359
90 = 270
270 = 90
359 = 1
360 = 0
up
0
gleb dot deykalo at gmail dot com
2 months ago
Some transformations including Imagick ::rotateImage() may change "image page" -- working area inside the image you work on.

Be careful with future modifications afterwards because the image page would be different from new sizes of the image.

For example, if you do Imagic::cropImage() after rotation, you need to set image page properly, otherwise your crop would be performed relating to wrong coordinates (depending on rotation angle, resulting image size may vary).

<?php
$Image
= new Imagick($sourceImagePath);

$transparent = '#00000000';
$Image->rotateImage(new \ImagickPixel(), 45); // This makes resulting image bigger

// Set page to be of the full size of new image, starting at top left corner (0, 0)
$Image->setImagePage($Image->getImageWidth(), $Image->getImageHeight(), 0, 0);

$Image->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
?>
up
-2
wjsams at gmail dot com
7 years ago
If you want to rotate an image by a certain degree you can do this:

<?php
header
('content-type: image/jpeg');
$imagick = new Imagick();
$imagick->readImage('castle.jpg');
$imagick->rotateImage(new ImagickPixel(), 90);
print
$imagick->getImage();
?>
up
-8
Baptiste VALTHIER
5 years ago
You can rotate an jpg image by -13.55° into a transparent png image with :

<?php
$imagick
= new Imagick();
$imagick->readImage('my.jpg');
$imagick->rotateImage(new ImagickPixel('none'), -13.55);
$imagick->writeImage('my_rotated.png');
$imagick->clear();
$imagick->destroy();
?>
To Top