2010-08-26 2 views
1

У меня есть веб-сайт, который загружает загруженное изображение пользователя и составляет три копии - «полную» копию для печати (с уменьшением до 1500x1125), «веб-копию» для отображение в режиме онлайн (еще не закодировано) и, наконец, миниатюра.CodeIgniter/PHP/GD2 Манипуляция изображения воспроизводится

Так вот код - _imageformat() передается параметры (которые я подтвердили, что правильно) от Upload класса КИ:

function _imageformat($fullpath, $shortpath, $width, $height) 

{ // теперь форматировать изображение.

// Во-первых, мы проверяем, если это пейзаж или портрет если ($ ширина> = $ высота) // Это пейзаж (или квадрат) { // Теперь создать полный печатный образ $ fullimage = $ this -> _ resize ('l', $ fullpath, $ shortpath, $ width, $ height); } else // Это портрет { // Теперь создаем полное изображение для печати $ fullimage = $ this -> _ resize ('p', $ fullpath, $ shortpath, $ width, $ height); }

}

функция _resize (тип $, $ FULLPATH, $ shortpath, ширина $, $ высота) { // Установка по умолчанию для работы с изображениями опций конфигурации $ конфигурации в [ 'image_library'] = 'gd2'; $ config ['source_image'] = $ fullpath; $ config ['maintain_ratio'] = TRUE;

// Shave the '.jpg' from the end to append some nice suffixes we'll use 
$newimage = substr($fullpath, 0, -4).'_full'.".jpg"; 

$config['new_image'] = $newimage; 

if ($type == 'l') // If it's landscape 
{ 
$config['width'] = 1500; 
$config['height'] = 1125; 
} 
else if ($type == 'p') // If it's portrait 
{ 
$config['width'] = 1125; 
$config['height'] = 1500; 
} 

// Load the image library with the specified parameters, and resize the image! 
$this->load->library('image_lib', $config); 
$this->image_lib->resize(); 

// Create a thumbnail from the full image 
$config['source_image'] = $newimage; 
$config['new_image'] = substr($fullpath, 0, -9)."_thumb".".jpg"; 
$config['maintain_ratio'] = TRUE; 
$config['width'] = 150; 
$config['height'] = 150; 

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

$this->image_lib->resize(); 

return $newimage; 

}

Что должно произойти: В моей папке загрузок, есть три изображения - оригинальный загруженный файл (мы будем называть его image.jpg), уменьшенный файл (с именем image_full. jpg) и миниатюру (с именем image_thumb.jpg).

Что происходит: В моей папке закачек, есть только TWO изображений - оригинальный загруженный файл (Image.jpg), а также изменения размера файл (image_full.jpg). Никакой эскиз никогда не создается.

Что интересно, однако, ** в том, что если поместить код для создания эскизов первого, он генерирует миниатюрное изображение, но ** НЕ _full (размеры) изображения.

Так что мне кажется, что он никогда не будет запускать $this->image_lib->resize() дважды. Почему нет? Это какая-то любительская ошибка, которую я делаю, или я пропустил что-то очевидное ?! : P

Спасибо!

Джек

Edit: Я должен отметить, что да, я знаю, загружая image_lib библиотеку дважды. Я понял, что это единственный способ передать ему новые параметры. Я также попытался, изменив размер полного изображения, вызвав $this->_thumbnail(), который снова загрузил библиотеку. Но все же произошла одна и та же проблема.

Редактировать 2: Я также пробовал использовать $this->image_lib->clear() - все еще не повезло.

ответ

2

Вы должны загрузить библиотеку только один раз и инициализировать его с различной конфигой:

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

// full image stuff 
$this->image_lib->initialize($config); 
$this->image_lib->resize(); 

// thumbnail stuff 
$this->image_lib->initialize($config); 
$this->image_lib->resize(); 
Смежные вопросы