PHP Conference Japan 2024

Imagick::getImageOrientation

(PECL imagick 2, PECL imagick 3)

Imagick::getImageOrientation获取图像方向

描述

public Imagick::getImageOrientation(): int

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

参数

此函数没有参数。

返回值

成功时返回一个整数。

错误/异常

错误时抛出ImagickException异常。

添加注释

用户贡献注释 2 条注释

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');
?>
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方向设置可能无法正确解析。倾斜或倾斜拍摄也是如此。方向(和相机)对这些情况根本没有感觉。”(https://imagemagick.org.cn/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