2016-04-15 79 views
1

我有一个尺寸为(W-3000 X H-4000)的图像。当我上传并调整大小时,它总是显示为横向模式,意味着新的尺寸是w-1067 X h-800。我想创建这张照片800X600的风景或600X800的肖像。这里是我的代码:图像调整大小时,Codeigniter图像旋转

$config['upload_path'] = './uploads/'; 
    $config['allowed_types'] = 'jpg|jpeg|gif|png'; 
    $config['max_size'] = '5000'; 
    $this->load->library('upload', $config); 

    //check if a file is being uploaded 
    if(strlen($_FILES["testimg"]["name"])>0){ 

     if (!$this->upload->do_upload("testimg"))//Check if upload is unsuccessful 
     { 
      $error = array('error' => $this->upload->display_errors()); 
      print_r($errors); 
     } 
     else 
     { 

      $config['image_library'] = 'gd2'; 
      $config['source_image'] = $this->upload->upload_path.$this->upload->file_name; 
      $config['width'] = '1'; 
      $config['height'] = '800'; 
      $config['maintain_ratio'] = TRUE; 
      $config['master_dim'] = 'height'; 
      $this->load->library('image_lib',$config); 

      if (!$this->image_lib->resize()){ 
       echo "error"; 
      }else{ 
       echo "success"; 
      } 
     }  
    } 

在我的代码高度总是800px的大小。 3000X4000尺寸图像可以。但是,当我使用4000X3000尺寸图像时呢?任何人都可以帮我解决这个问题吗?由于

+0

使用和getimagesize() – Vickel

回答

2
$filename = $_FILES['testing']['tmp_name']; 
list($width, $height) = getimagesize($filename); 

if ($width >= $height) 
{ 
    $config['width'] = 800; 
    $config['master_dim'] = 'width'; 
} 
else 
{ 
    $config['height'] = 800; 
    $config['master_dim'] = 'height'; 
} 

更短,您可以使用master_dim“自动”的参数,将决定其值越大 - 宽度或高度。

$filename = $_FILES['testing']['tmp_name']; 
list($width, $height) = getimagesize($filename); 

if ($width >= $height) 
{ 
    $config['width'] = 800; 
} 
else 
{ 
    $config['height'] = 800; 
} 

$config['master_dim'] = 'auto'; 
+0

我已经和2448X3264尺寸图像尝试过。当我调整大小时,它显示800X600图像。但调整大小的图像旋转。我想我应该使用exif。 –

2

感谢@Rpojka为您解答。但我用exif_read_data()修复了它。这里是我的代码:

$config['upload_path'] = './uploads/'; 
    $config['allowed_types'] = 'jpg|jpeg|gif|png'; 
    $config['max_size'] = '6048'; 
    $this->load->library('upload', $config); 

    //check if a file is being uploaded 
    if(strlen($_FILES["testimg"]["name"])>0){ 

     if (!$this->upload->do_upload("testimg"))//Check if upload is unsuccessful 
     { 
      $error = array('error' => $this->upload->display_errors()); 
      print_r($errors); 
     } 
     else 
     { 

      $config['image_library'] = 'gd2'; 
      $config['source_image'] = $this->upload->upload_path.$this->upload->file_name; 
      $filename = $_FILES['testimg']['tmp_name']; 


      $imgdata=exif_read_data($this->upload->upload_path.$this->upload->file_name, 'IFD0'); 


      list($width, $height) = getimagesize($filename); 
      if ($width >= $height){ 
       $config['width'] = 800; 
      } 
      else{ 
       $config['height'] = 800; 
      } 
      $config['master_dim'] = 'auto'; 


      $this->load->library('image_lib',$config); 

      if (!$this->image_lib->resize()){ 
       echo "error"; 
      }else{ 

       $this->image_lib->clear(); 
       $config=array(); 

       $config['image_library'] = 'gd2'; 
       $config['source_image'] = $this->upload->upload_path.$this->upload->file_name; 


       switch($imgdata['Orientation']) { 
        case 3: 
         $config['rotation_angle']='180'; 
         break; 
        case 6: 
         $config['rotation_angle']='270'; 
         break; 
        case 8: 
         $config['rotation_angle']='90'; 
         break; 
       } 

       $this->image_lib->initialize($config); 
       $this->image_lib->rotate(); 

      } 
     }  
    } 

这里是EXIF方向图

1  2  3  4   5   6   7   8 

888888 888888  88 88  8888888888 88     88 8888888888 
88   88  88 88  88 88  88 88   88 88  88 88 
8888  8888 8888 8888 88   8888888888 8888888888   88 
88   88  88 88 
88   88 888888 888888 
+1

很好的解决方案。只是文件类型的awware,因为文件类型,这将是很好的处理它像'if(exif_imagetype('image.gif')== IMAGETYPE_JPEG或exif_imagetype('image.gif')== IMAGETYPE_TIFF_II或exif_imagetype( 'image.gif')== IMAGETYPE_TIFF_MM){ //其余代码 } else {// handle exception}' – Tpojka

+0

感谢您的信息:) –

+0

没问题,我在[PHP文档](http: /php.net/manual/en/function.exif-imagetype.php)。虽然对你有好处。 – Tpojka