Я использую библиотеку манипуляций с изображениями 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
Кто-нибудь знает, что может быть причиной загрузки библиотеки для загрузки?