Imagick::getImageOrientation

(PECL imagick 2, PECL imagick 3)

Imagick::getImageOrientation获取图像方向

说明

public Imagick::getImageOrientation(): int

获取图像方向。返回值是 方向常量 之一。

参数

此函数没有参数。

返回值

成功时返回一个 int。

错误/异常

出错时抛出 ImagickException。

添加注释

用户贡献的注释 2 notes

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 函数,您将获得 EXIF 文件格式中定义的图像方向值。这意味着您将获得 ImageMagick 的一个方向常量整数表示,它看起来像“imagick::ORIENTATION_UNDEFINED”,其“_VALUE”值如下:未定义 (0)、左上 (1)、右上 (2)、右下 (3)、左下 (4)、左上 (5)、右上 (6)、右下 (7) 和左下 (8)。直接打印出来时,这些预定义的常量会产生括号中的数字。未定义被设置为 0 有道理,因为 - 根据维基百科 - EXIF 允许图像有八种可能的值(并非所有图像都有一组 EXIF 属性)。

EXIF 方向也称为“旋转”,同样,根据维基百科:http://en.wikipedia.org/wiki/Exchangeable_image_file_format。这样做有什么意义?根据 ImageMagick 的官方文档,它是为了旋转照片,使其在拍摄后以正确方向显示。这似乎真的是一件相机相关的事,因为 ImageMagick 文档中提到:“如果您将相机几乎直指上或下,EXIF 方向设置可能无法正确解决。倾斜或倾斜的拍摄也一样。方向(和相机)对这些情况没有概念。”(http://www.imagemagick.org/Usage/photos/

如果您难以让此函数显示图像方向的值,那么请使用函数和参数 getImageProperties('*', FALSE);。这会生成与图像关联的所有属性的数组,其中一个属性将具有 exif:Orientation 的键值。如果没有,则意味着您将从此函数返回零,表示“未定义”方向。

一些示例代码

<?php

// 作者:[email protected]

// 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