Класс манипулирования изображением Codeigniter поворачивает изображение во время изменения размера - PullRequest
3 голосов
/ 16 марта 2010

Я использую библиотеку манипуляций с изображениями 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: ширина

Глядя на изображение в фотошопе, вот размеры:

высота: 2048 ширина: 1536

Кто-нибудь знает, что может быть причиной загрузки библиотеки для загрузки?

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Я никогда не использовал эту библиотеку, но, прочитав документацию, мне интересно, может ли помочь свойство master_dim. Если вы установите для этого параметра значение «высота» для вертикальных изображений, которые могут держать их правильно вверх. Вы можете просто проанализировать каждое изображение через условное выражение, чтобы увидеть, выровнено ли изображение по вертикали, а затем установить это свойство только в случае необходимости. Моя другая мысль о свойстве keep_ratio. В документации сказано, что с этим значением «ИСТИНА» он будет изменять размеры как можно ближе к целевым значениям при сохранении соотношения сторон. Интересно, думает ли он, что поворот изображения позволяет ему более точно сохранить это соотношение? В качестве эксперимента попробуйте установить для этого значения значение «ЛОЖЬ» для вертикальных изображений.

0 голосов
/ 17 марта 2010

Хорошо - я решил не доверять фотошопу и открыл изображения, которые я тестировал, в QuickTime и Safari. Я обнаружил, что они на самом деле все еще были горизонтальными.

Итак, Codeigniter работал точно так, как ожидалось.

Я вернулся в фотошоп, сохранил тестовые изображения для веба, заново загрузил их, и все заработало как положено.

Затем я удалил дополнительный код, который я добавил, чтобы проверить, было ли изображение вертикальным и библиотека работает так, как я ожидал.

Теперь - мне нужно выяснить, как запретить конечным пользователям делать именно это.

Спасибо, что нашли время ответить на мой вопрос musoNic80. Надеюсь, кто-то еще может извлечь уроки из моих ошибок здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...