PHP图像库-处理iPhone/iPad图像

PHP图像库-处理iPhone/iPad图像,php,uiimage,image-rotation,Php,Uiimage,Image Rotation,我用php和mysql创建了一个图像库,其中包含了几种添加图像的方法&能够按添加方法和/或类别进行排序。在注意到苹果设备上的一些图像显示方向“错误”后,我创建了另一个页面来编辑方向和其他文件信息,然后将所述更改保存回文件和数据库。直到我认为我已经解决了这个问题后,我才在苹果设备上查看了修改后的图像,结果才意识到图像现在在该设备上的方向是“错误的”。我一直在谷歌上搜索这个,但我不太清楚在这种情况下,我需要学习什么来处理来自苹果设备的图像。如果能朝着正确的方向努力,我们将不胜感激 谢谢 在我的“ga

我用php和mysql创建了一个图像库,其中包含了几种添加图像的方法&能够按添加方法和/或类别进行排序。在注意到苹果设备上的一些图像显示方向“错误”后,我创建了另一个页面来编辑方向和其他文件信息,然后将所述更改保存回文件和数据库。直到我认为我已经解决了这个问题后,我才在苹果设备上查看了修改后的图像,结果才意识到图像现在在该设备上的方向是“错误的”。我一直在谷歌上搜索这个,但我不太清楚在这种情况下,我需要学习什么来处理来自苹果设备的图像。如果能朝着正确的方向努力,我们将不胜感激


谢谢

在我的“gallery3”照片库中看到同样的问题。像machouinard一样,我使用“jhead-norot filename.jpg”从图像中去除方向标题。这解决了苹果的轮换问题,而且它似乎没有搞乱其他浏览器

要就地编辑一组文件,我直接进入(gallerytop)/lib/albums中的相册存储区域,并执行
find-typef | xargs sudo jhead-norot
。它足够聪明,只修改需要修改的文件,并在工作时将它们的列表打印到stdout


为了让gallery3更新缩略图,我进入数据库并设置“dirty”标志如下:
echo“updateitems set thumb\u dirty=1,resize\u dirty=1,其中相对路径\u缓存类似于'ALBUMNAME/%';“| mysql-u root-p gallery3
。然后我进入画廊维护模式并运行“重建图像”实用程序。

忘记我发布了这个。我想出了如何处理入职问题,所以我想和大家分享一下。现在看起来很简单。我用Codeigniter重新创建了这个项目。CI很好,节省了很多时间,但我很高兴我第一次自己写的。我确实通过这种方式学到了更多

首先,如果该文件是jpg,则使用获取EXIF数据

$new
是要检查方向的上载文件

       $this->load->library('pel/PelJpeg');


       if($ext == 'jpg'){
            $pdw= new PelDataWindow(file_get_contents($new));
            if(PelJpeg::isValid($pdw)){
                $input_jpg = new PelJpeg($new);
                $exif = $input_jpg->getExif();
            }
        }
然后,如果存在EXIF,则获取方向值并通过switch语句运行它,相应地旋转它,然后重置方向值。我使用的是image_moo和Codeigniter,但这显然可以更改为使用任何图像处理库

老实说,我不确定是否所有这些if语句都需要存在,但我一直遇到jpg的问题,因为它只包含一些EXIF信息,如果没有这些信息,就会破坏脚本

 if($exif !== NULL){
 if($tiff = $exif->getTiff()){
 if($ifd0 = $tiff->getIfd()){
 if($orient = $ifd0->getEntry(PelTag::ORIENTATION)){
 $this->image_moo->load($new);

 //find the orientation value from the orientation tag.  May be a better way, but this works for me.                                    
 $orientation = str_replace(' ', '', $orient);
 //The orientation value from the orientation tag is after 'Value:'
 if (($tmp = strstr($orientation, 'Value:')) !== false) {
      $str = substr($tmp, 6, 1);
 }

 switch ($str)
 {
     // up is pointing to the right
     case 8:
       $this->image_moo->rotate(90);
       $orient->setValue(1);
       break;
     // image is upside-down
     case 3:
       $this->image_moo->rotate(180);
       $orient->setValue(1);
       break;
     // up is pointing to the left
     case 6:
       $this->image_moo->rotate(270);
       $orient->setValue(1);
       break;
     // correct orientation
     case 1:
       break;
       }
     $this->image_moo->save($new,TRUE);
     if ($this->image_moo->errors) print $this->image_moo->display_errors();
     $this->image_moo->clear();
 }
 }
 }
 }
希望这将有助于其他人与同样的问题斗争。 如果你看到任何可以改进的地方,请告诉我。但这对我来说很有用


标记

如果您有处理iPhone/iPad ect图像的方法,请在数据库中记录已翻转的图像,然后在翻转的图像上将其翻转,然后再发送给用户,或者让用户在下载/查看之前选择方向这不是你的错用户在错误的方向添加图像。我花了3天的时间试图解决这个问题。我所希望的就是以人们预期的方式显示上传的iphone图像。如果我旋转图像以在电脑屏幕(pc或macbook)上正确显示,这很好,但在iphone/ipad上查看时图像方向是关闭的。我只是用php来显示存储在服务器上的图像,但我甚至找不到一个不那么简单的答案。我已经阅读了数百篇帖子,并关注了数百个链接。谷歌甚至提供了我的原创帖子(上周五,在我发布it-GoFigure后20分钟)。我需要成为一名IOS程序员吗?好的,这是一个临时的管道胶带解决方案,但我使用jhead-norot来清除exif旋转标签。如果有人有更好的建议,我很乐意听。