Вывод изображения в виде картинки после проделанных изменений

Тема в разделе "PHP", создана пользователем NetStranger, 29 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. NetStranger

    NetStranger Постоялец

    Регистр.:
    16 сен 2008
    Сообщения:
    124
    Симпатии:
    1
    Я так думаю проблема из несложных, но я что то не соображу, туплю как то...
    Есть адрес /thumb/70/3/asdasdasd/IMG_0029.JPG
    Контроллер thumb перехватывает УРЛ до оригинальной картинки и должен сделать превью, сохранить и тут же его выдать, а если уже сохранен то тупо вывести на экран как картинку.
    Истинный адрес до превью должен в итоге быть таким
    /3/asdasdasd/thumbs/IMG_0029.JPG
    Код примерно такой, используется CI

    PHP:
    $this->load->library('image_lib');
    $width $this->uri->segment(2);
            
    $path '/files_foto/'$this->uri->segment(3).'/'$this->uri->segment(4).'/'$this->uri->segment(5);
             if(!
    file_exists('./files_foto/'$this->uri->segment(3).'/'$this->uri->segment(4).'/thumbs/')) {
                        
    mkdir('./files_foto/'$this->uri->segment(3).'/'$this->uri->segment(4).'/thumbs/');
                    }
             
    $thumb '/files_foto/'$this->uri->segment(3).'/'$this->uri->segment(4).'/thumbs/'$this->uri->segment(5);
             if(!
    file_exists('.'.$thumb)) {
                
                            
    $config['image_library'] = 'gd2'// выбираем библиотеку
                            
    $config['source_image'] = '.'.$path;
                            
    $config['create_thumb'] = TRUE// ставим флаг создания эскиза
                            
    $config['maintain_ratio'] = TRUE// сохранять пропорции
                            
    $config['width'] = $width// и задаем размеры
                            
    $config['height'] = 100;
                            
    $config['thumb_marker'] = "";
                            
    $config['new_image'] = '.'.$thumb;

                            
    $this->image_lib->initialize($config);
                            if ( ! 
    $this->image_lib->resize()) {
                                echo 
    $this->image_lib->display_errors();
                            }
                    }


     
    $config['image_library'] = 'gd2'// выбираем библиотеку
                
    $config['source_image'] = '.'.$thumb;
                
    $config['dynamic_output'] = TRUE;
                
    $this->image_lib->initialize($config);
                
    $this->image_lib->resize();
    Все работает, но мне кажется эт слишком громозким и медленным. Где подвох?

    или же я изначально какую то фигню делаю? моя цель сделать ссылку на превью чтобы они сами делались если их нет.. ну как обычно вообщем
     
  2. Mongolor

    Mongolor

    Регистр.:
    5 дек 2007
    Сообщения:
    157
    Симпатии:
    29
    А вопрос то в чем? Код как код, система я подозреваю у тя не высоконагруженная, поэтому беспокоиться о скорости тебе нечего.
     
  3. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Подвох в алгоритме работы
    Скрипт берёт картинку с вашего диска по адресу адрес /thumb/70/3/asdasdasd/IMG_0029.JPG
    проверяет если уменьшенная копия,если нет создаёт её и выводит на экран
    А надо сделать две директории на диске
    исходная картинка real и уменьшенная thumbs
    брать исходную картинку сохранять её в директорию real(если она нужна) и делать ее ресайз и сохранять в директорию thumbs
    тогда по адресу
    /3/asdasdasd/real/IMG_0029.-будет основная картинка
    а по /3/asdasdasd/thumbs/IMG_0029-будет уменьшенная
    и не придётся налету делать ресайз,что очень нагружает проект.
     
  4. krenkus

    krenkus Создатель

    Регистр.:
    10 мар 2008
    Сообщения:
    37
    Симпатии:
    4
    serjinio прав, я бы только добавил, что использование обьектов, еще не значит ООП ;)
    Начинать надо со стиля программинга, потихоньку эволюционируя от быдлокодинга к адекватному ООП, тогда и проще будет решать подобные задачи.
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Так тумба у ТС и делается при первом обращении к фото. Так что предложенный вариант от ресайзинга на лету не спасёт.

    Правильнее тумбы делать при аплоаде фото, а куда их сохранять дело уже десятое.
     
  6. Mongolor

    Mongolor

    Регистр.:
    5 дек 2007
    Сообщения:
    157
    Симпатии:
    29
    А проблема-то в чем?
    Надо сделать в другой папке? Дык поправь путь до картинок.
     
  7. NetStranger

    NetStranger Постоялец

    Регистр.:
    16 сен 2008
    Сообщения:
    124
    Симпатии:
    1
    Вы меня не поняли. у меня щас скрипт и делает так, по этому адресу ищет тумбу оригинальной картинки и выводит на экран с помощью
    PHP:
     $config['image_library'] = 'gd2'// выбираем библиотеку
                
    $config['source_image'] = '.'.$thumb;
                
    $config['dynamic_output'] = TRUE;
                
    $this->image_lib->initialize($config);
                
    $this->image_lib->resize(); 
    А если в отдельной папке не находит ранее созданной тумбы, он ее сам делает и сохраняет, вопрос лишь в том, правильно ли я вывожу картинку на экран, есть ли более рациональное решение?
     
Статус темы:
Закрыта.