Codeigniter图像处理类在调整大小期间旋转图像

时间:2010-03-16 04:20:43

标签: codeigniter

我正在使用Codeigniter的图像处理库将上传的图像重新调整为三种尺寸,小尺寸,普通尺寸和大尺寸。

重新调整尺寸非常有效。但是,如果我正在调整垂直图像的大小,则库正在旋转图像,使其处于水平状态。

这些是我的配置设置:

     $this->resize_config['image_library'] = 'gd2';
     $this->resize_config['source_image'] = $this->file_data['full_path'];
     $this->resize_config['maintain_ratio'] = TRUE;

     // These change based on the type (small, normal, large)
     $this->resize_config['new_image'] = './uploads/large/'.$this->new_file_name.'.jpg';
     $this->resize_config['width'] = 432;
     $this->resize_config['height'] = 288;

我没有设置master_dim属性,因为默认设置为auto,这就是我想要的。

我的假设是库将采用垂直图像,看到高度大于宽度并适当地平移高度/宽度配置,以使图像保持垂直。

正在发生的事情(显然)是图书馆在垂直方向上旋转图像并按照配置调整大小。

这是我必须进行实际重新调整大小的代码:

        log_message('debug', 'attempting '.$size.' photo resize');
        $this->CI->load->library('image_lib');
        $this->CI->image_lib->initialize($this->resize_config);
        if ($this->CI->image_lib->resize())
        {
              $return_value = TRUE;
              log_message('debug', $size.' photo resize successful');
        }
        else
        {
            $this->errors[] = $this->CI->image_lib->display_errors();
            log_message('debug', $size.' photo resize failed');
        }
        $this->CI->image_lib->clear();
        return $return_value;

编辑

我认为问题可能来自上传库。当我从上传中获取image_height和image_width时,即使我上传了垂直图像,宽度也似乎更大。

这是我用来上传照片的代码的一部分:

     $this->upload_config['allowed_types'] = 'jpg|jpeg';
     $this->upload_config['max_size']  = '2000';
     $this->upload_config['max_width']  = '0';
     $this->upload_config['max_height']  = '0';
     $this->upload_config['upload_path'] = './uploads/working/';


     $this->CI->load->library('upload', $this->upload_config);
     if ($this->CI->upload->do_upload($this->posted_file))
     {
         $this->file_data = $this->CI->upload->data();
         $return_value = TRUE;
         log_message('debug', 'upload successful');
     }

我添加了一些日志来检查值:

     $this->is_vertical = $this->file_data['image_height'] > $this->file_data['image_width'];
     log_message('debug', 'image height:'.$this->file_data['image_height']);
     log_message('debug', 'image width:'.$this->file_data['image_width']);
     if ($this->is_vertical)
     {
         $this->resize_config['master_dim'] = 'height';
     }
     else
     {
         $this->resize_config['master_dim'] = 'width';
     }
    log_message('debug', 'master_dim setting:'.$this->resize_config['master_dim']); 

这些是日志的结果:

DEBUG - 2010-03-16 18:35:06 - >图像高度:1536 DEBUG - 2010-03-16 18:35:06 - >图像宽度:2048 DEBUG - 2010-03-16 18:35:06 - > master_dim设置:宽度

观看Photoshop中的图像,这些是尺寸:

身高:2048 宽度:1536

任何人都知道可能导致上传库执行此操作的原因是什么?

2 个答案:

答案 0 :(得分:1)

我从未使用过这个库,但是在阅读完文档后,我想知道master_dim属性是否有帮助。如果您将此设置为垂直图像的“高度”,可能会使它们正确向上。您可以通过条件解析每个图像,以查看图像是否垂直对齐,然后只在需要时才设置此属性。 我的另一个想法是关于maintain_ratio属性。文档说,如果设置为“TRUE”,它将调整为尽可能接近目标值,同时保持纵横比。我想知道它是否认为旋转图像可以更准确地保留这个比例?作为实验,请尝试为垂直图像将此值设置为“FALSE”。

答案 1 :(得分:0)

好的 - 我决定不相信photoshop并打开我在快速和野生动物园测试的图像。我发现它们实际上仍然是水平的。

所以Codeigniter的运作与预期完全一致。

我回到了photoshop,在测试图像上进行了网络保存,重新上传它们并按预期工作。

然后我删除了我添加的额外代码,以测试图像是否是垂直的,并且库的工作方式与我预期的一样。

现在 - 我需要弄清楚如何防止最终用户做这件事。

感谢您抽出宝贵时间回答我的问题musoNic80。希望其他人可以从我的错误中吸取教训。