PHP Conference Japan 2024

Imagick::getImageOrientation

(PECL imagick 2,PECL imagick 3)

Imagick::getImageOrientation取得影像方向

描述

public Imagick::getImageOrientation(): int

取得影像方向。傳回值是方向常數之一。

參數

此函式沒有參數。

傳回值

成功時傳回整數。

錯誤/例外

發生錯誤時拋出 ImagickException。

新增註解

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

43
orrd101 at yahoo dot com
11 年前
以下是如何使用 getImageOrientation() 資訊來自動旋轉影像至正確方向...

<?php
// 注意:$image 是一個 Imagick 物件,不是檔名!請參閱以下範例使用方式。
function autoRotateImage($image) {
$orientation = $image->getImageOrientation();

switch(
$orientation) {
case
imagick::ORIENTATION_BOTTOMRIGHT:
$image->rotateimage("#000", 180); // 旋轉 180 度
break;

case
imagick::ORIENTATION_RIGHTTOP:
$image->rotateimage("#000", 90); // 順時針旋轉 90 度
break;

case
imagick::ORIENTATION_LEFTBOTTOM:
$image->rotateimage("#000", -90); // 逆時針旋轉 90 度
break;
}

// 現在已自動旋轉,請確保 EXIF 資料正確,以防 EXIF 與影像一起儲存!
$image->setImageOrientation(imagick::ORIENTATION_TOPLEFT);
}
?>

範例使用

<?php
$image
= new Imagick('my-image-file.jpg');
autoRotateImage($image);
// - 在此對影像進行其他操作 -
$image->writeImage('result-image.jpg');
?>
4
holdoffhunger at gmail dot com
12 年前
使用 getImageOrientation 函式,您將取得影像的 Orientation 值,如 EXIF 檔案格式中所定義。這表示您將取回 ImageMagick 的 Orientation 常數的整數表示形式,看起來像 " imagick::ORIENTATION_UNDEFINED",其中 "_VALUE" 值為:未定義 (0)、topleft (1)、topright (2)、bottomright (3)、bottomleft (4)、lefttop (5)、righttop (6)、rightbottom (7) 和 leftbottom (8)。直接列印時,這些預定義常數會產生括號中的數字。未定義設定為 0 是合理的,因為根據 Wikipedia,EXIF 允許影像有八個可能的值(並非每個影像都有一組 EXIF 屬性)。

EXIF Orientation 也稱為「旋轉」,同樣根據 Wikipedia:http://en.wikipedia.org/wiki/Exchangeable_image_file_format。那有什麼意義?根據官方 ImageMagick 文件,它是為了旋轉照片,使其在拍攝後正確定向。這似乎是相機的問題,因為 ImageMagick 文件提到:「如果您將相機幾乎直接向上或向下對準,EXIF 方向設定可能無法正確解析。斜角或傾斜拍攝也是如此。方向(和相機)對於這些情況沒有任何感知能力。」(https://imagemagick.dev.org.tw/Usage/photos/

如果您在取得此函式以顯示影像方向的值時遇到問題,請使用 getImageProperties('*', FALSE); 函式和參數。這會產生與影像相關聯的所有屬性的陣列,其中一個屬性的鍵值為 exif:Orientation。如果沒有,則表示您將從此函式取回零,表示「未定義」方向。

一些範例程式碼

<?php

// 作者:holdoffhunger@gmail.com

// Imagick 類型
// ---------------------------------------------

$imagick_type = new Imagick();

// 開啟檔案
// ---------------------------------------------

$file_to_grab = "image_workshop_directory/test.jpg";

$file_handle_for_viewing_image_file = fopen($file_to_grab, 'a+');

// 抓取檔案
// ---------------------------------------------

$imagick_type->readImageFile($file_handle_for_viewing_image_file);

// 取得方向值
// ---------------------------------------------

$imagick_orientation = $imagick_type->getImageOrientation();

switch(
$imagick_orientation)
{
case
'0':
$imagick_orientation_evaluated = "未定義";
break;

case
'1':
$imagick_orientation_evaluated = "左上";
break;

case
'2':
$imagick_orientation_evaluated = "右上";
break;

case
'3':
$imagick_orientation_evaluated = "右下";
break;

case
'4':
$imagick_orientation_evaluated = "左下";
break;

case
'5':
$imagick_orientation_evaluated = "左上";
break;

case
'6':
$imagick_orientation_evaluated = "右上";
break;

case
'7':
$imagick_orientation_evaluated = "右下";
break;

case
'8':
$imagick_orientation_evaluated = "左下";
break;
}

// 列印方向值
// ---------------------------------------------

print("# $imagick_orientation - $imagick_orientation_evaluated");

?>
To Top