CodeIgniter / PHP / GD2 Image Manipulation подыгрывает - PullRequest
1 голос
/ 26 августа 2010

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

Итак, вот код - _imageformat () передает параметры (которые я подтвердил, чтобы быть правильными) из класса загрузки CI:

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

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

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

}

функция _resize ($ type, $ fullpath, $ shortpath, $ width, $ height) { // Настройка параметров конфигурации по умолчанию для работы с изображениями $ config ['image_library'] = 'gd2'; $ config ['source_image'] = $ fullpath; $ config ['keep_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).

Что происходит: В моей папке для загрузки есть только ДВА изображения - исходный загруженный файл (image.jpg) и измененный размер (image_full.jpg). Эскиз никогда не создается.

Интересно, однако, **, что если я помещу код для создания миниатюр сначала , он генерирует миниатюрное изображение, но ** НЕ _full (измененный размер) изображение ,

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

Спасибо!

Jack

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

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

1 Ответ

2 голосов
/ 26 августа 2010

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

$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();
...