我不确定是否有任何修复,但问题如下。
问题: 我的客户使用iphone拍了一张照片。由于它处于错误的方向,他使用手机中的内置照片编辑器将其翻转到正确的方向。但是,当他从他的Mac上传照片时,照片实际上会返回错误的方向。
在Mac上,以正确的方向看到校正后的图片。但是当发送到Windows PC或上传到Linux服务器时,图片会返回原来的错误方向。
这是mac问题还是其他问题?或者是否可以在PHP脚本中完成任何修复。以下是上传照片的php脚本。
$file=array();
$listingid=$_POST['listing'];
if(!empty($_FILES['file'])){
foreach($_FILES['file']['name'] as $key=>$name){
$extt=pathinfo($name, PATHINFO_EXTENSION);
$name=$this->mediacontrol->generateUniqueKey(32);
$name.=".".$extt;
if($_FILES['file']['error'][$key]==0 && move_uploaded_file($_FILES['file']['tmp_name'][$key],"uploads/{$name}")){
$file['file_name']=$name;
$file['file_type']=$_FILES['file']['type'][$key];
$file['file_path']="uploads/{$name}";
$file['full_path']= base_url()."uploads/{$name}";
$ext=explode(".",$name);
$file['thumb_path']=base_url()."uploads/thumbnails/250/".$ext[0]."_thumb.".$ext[1];
$file['thumb_short']="uploads/thumbnails/250/".$ext[0]."_thumb.".$ext[1];
$file['link_folder']="uploads/";
$file['raw_name']="null";
$file['orig_name']="$name";
$file['client_name']="null";
$file['file_size']=$_FILES['file']['size'][$key];
$file['is_image']="1";
$file['image_width']="0";
$file['image_height']="0";
$file['image_type']=$_FILES['file']['type'][$key];
$file['image_size_str']="width:0px;height:0px;";
$id=$this->mediacontrol->insertData($file);
$file_id[]=$id;
$config['image_library'] = 'GD2';
$config['source_image'] = "".$file['file_path'];
$config['new_image']="uploads/thumbnails/250/";
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 250;
$config['height'] = 250;
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->image_lib->clear();
$this->listing_model->matchMedia($id,$listingid);
$this->listing_model->updateStage(1,$id);
echo "Successfully uploaded ".$name."<br>";
}
else{
echo "Something went terribly wrong when uploading".$name;
}
}
}
请指教。
谢谢。
答案 0 :(得分:4)
抱歉浪费任何身体的时间。我发现问题并解决了我的问题。
问题: 用户使用的一些照片编辑器不会物理旋转照片,它们基本上只是更新附加到图像的元数据。这会导致问题,因为某些环境无法读取该数据。在Windows和我的情况下,它非常明显。
解决方案: 所以除了在上传图片时再做一个步骤,别无选择。那就是检查图像的exif数据并进行必要的调整。我正在使用带有GD2图像处理库的codeigniter。修复我的问题的代码如下。
$config['image_library'] = 'GD2';
$config['source_image'] = "../rentura/".$file['file_path'];
$config['new_image']="../rentura/uploads/thumbnails/250/";
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 250;
$config['height'] = 250;
$imgdata=exif_read_data($file['full_path'], 'IFD0');
switch($imgdata['Orientation']) {
case 3:
$config['rotation_angle']=180;
break;
case 6:
$config['rotation_angle']=-90;
break;
case 8:
$config['rotation_angle']=90;
break;
}
$this->image_lib->initialize($config);
if(!$this->image_lib->resize()){
echo $this->image_lib->display_errors();
}
$this->image_lib->rotate();
$this->image_lib->clear();
不太确定如何评价此解决方案。但如果有更好的解决方案,请告诉我。谢谢。