iPhone的图像方向 - 自动旋转图像与PHP,PEL,Image_moo
问题描述:
我试图旋转上传的图像保存之前,基于EXIF ORIENTATION标记。iPhone的图像方向 - 自动旋转图像与PHP,PEL,Image_moo
我已经单独检查了代码的每个部分,一切似乎都在自己的工作。
$ new是正确的路径和文件名。
Image_moo已被加载。
PEL(PHP EXIF Library)[http://lsolesen.github.com/pel/]已被加载。
图像包含旋转的EXIF数据。
我相信我得到了正确的switch语句。
该代码不会导致任何错误,它只是不旋转图像。
我在想什么或做错了什么?
马克
$new = the file that was just uploaded
...
$ext = strtolower($path_parts['extension']);
...
if($ext == 'jpg'){
$input_jpg = new PelJpeg($new);
$exif = $input_jpg->getExif();
if($exif !== NULL){
$tiff = $exif->getTiff();
$ifd0 = $tiff->getIfd();
if($orient = $ifd0->getEntry(PelTag::ORIENTATION)){
$this->image_moo->load($new);
$orient = str_replace(' ', '', $orient);
if (($tmp = strstr($orient, 'Value:')) !== false) {
$str = substr($tmp, 6, 1);//Get the value of the ORIENTATION tag
}
$this->image_moo->load($new);
switch ($str)
{
case 8:
$this->image_moo->rotate(270);
break;
case 3:
$this->image_moo->rotate(180);
break;
case 6:
$this->image_moo->rotate(90);
break;
case 1:
break;
}
$this->image_moo->save($new, TRUE);
}
$output_jpg = new PelJpeg($new);
$output_jpg->setExif($exif);
$output_jpg->saveFile($new);
}
}
答
林不知道有关PelJpeg
但Imagick
我做的:
...
switch($imagick->getImageOrientation()){
case 6:
$imagick->rotateImage(new ImagickPixel(), 90);
$imagick->setImageOrientation(1);
break;
case 8:
$imagick->rotateImage(new ImagickPixel(), 270);
$imagick->setImageOrientation(1);
break;
}
...
我用的是测试页面中显示的旋转图像得很好,但图片库未正确显示这些。出于某种原因,它在我改变它的方向后开始工作,在旋转'$ orient-> setValue(1);'之后将方向设置为1。测试页面上没有必要执行此步骤。我一定错过了一些东西,但至少现在起作用了。感谢您的示例代码! – Mark
setImageOrientation基本上重置EXIF。如果将图像旋转90度并且EXIF说它总共旋转90度,则它是180 – RolandasR
这非常有帮助。谢谢。 +1。 – CDR