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