PHP Conference Japan 2024

Imagick::rotateImage

(PECL imagick 2, PECL imagick 3)

Imagick::rotateImage旋轉影像

說明

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

將影像旋轉指定的度數。旋轉影像後留下的空白三角形會以背景顏色填滿。

參數

background

背景顏色

degrees

旋轉角度,以度為單位。旋轉角度會被解讀為將影像順時針旋轉的度數。

回傳值

成功時回傳 true

變更記錄

版本 說明
PECL imagick 2.1.0 現在允許使用表示顏色的字串作為第一個參數。先前的版本只允許使用 ImagickPixel 物件。

範例

範例 1 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();
}

?>

新增註解

使用者貢獻的註解 4 則註解

5
gleb dot deykalo at gmail dot com
8 年前
包含 Imagick ::rotateImage() 在內的一些轉換可能會變更「影像頁面」-- 您正在處理的影像內的工作區域。

請注意之後的修改,因為影像頁面會與影像的新尺寸不同。

例如,如果您在旋轉之後執行 Imagic::cropImage(),您需要正確設定影像頁面,否則您的裁切會相對於錯誤的座標執行(取決於旋轉角度,產生的影像大小可能會有所不同)。

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

$transparent = '#00000000';
$Image->rotateImage(new \ImagickPixel(), 45); // 這會讓產生的影像變大

// 將頁面設定為新影像的完整大小,從左上角 (0, 0) 開始
$Image->setImagePage($Image->getImageWidth(), $Image->getImageHeight(), 0, 0);

$Image->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
?>
4
Anonymous
8 年前
imagick 和 gd 的度數不同!
GD > 旋轉 90 度表示逆時針旋轉。
Imagick > 旋轉 90 度表示順時針旋轉。

GD 90 = Imagick 270 或 Imagick 90 = GD 270。

使用此函式。

<?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>';
?>

測試結果
1 = 359
90 = 270
270 = 90
359 = 1
360 = 0
2
AlexG
12 年前
透明

<?php $im->rotateImage(new ImagickPixel('#00000000'), 75); ?>
1
wjsams at gmail dot com
16 年前
如果您想將影像旋轉特定度數,您可以這樣做

<?php
header
('content-type: image/jpeg');
$imagick = new Imagick();
$imagick->readImage('castle.jpg');
$imagick->rotateImage(new ImagickPixel(), 90);
print
$imagick->getImage();
?>
To Top