Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Выдача превью изображений (thumbnails) "на лету" (Дмитрий Герасимов)
Author Message
Дмитрий Герасимов
Заглянувший



Joined: 04 Oct 2008
Posts: 13
Карма: 6
   поощрить/наказать

Location: Санкт-Петербург

PostPosted: Fri Jul 10, 2009 8:41 pm (написано за 5 минут 21 секунду)
   Post subject: Выдача превью изображений (thumbnails) "на лету"
Reply with quote

Здравствуйте.

Хочу поделиться решением для вывода на сайте картинок нужного размера "на лету".
Эту идею я заметил в другой реализации, но в конечном виде это совсем самостоятельная программа.

Суть такова
Залили сырой файл произвольного размера (пусть будет /images/image.jpg).
Чтобы получить нужный размер в браузер (например надо уместить картинку в рамку 150х100), в теге img пишем
Code (html): скопировать код в буфер обмена
... src="/images/image.jpg?w=150&h=100"
И получаем то, что просили.

Как?

Такой запрос преобразуется в .htaccess и перенаправляется на нужный скрипт, который делает ресайз по заданным параметрам (если ресайзнутой картинки еще нет), сохраняет измененную копию картинки (если разрешили сохранять) для последующих запросов и выдает в браузер готовое изображение.

Решение - это файл thumb.php (нужный скрипт) и несколько строчек в .htaccess
Принимаем, что файл thumb.php находится в /includes, т.е. /includes/thumb.php
Картинки, с которыми работаем - это image/jpeg, image/pjpeg (блин, вот еще придумали. натолкнулся, когда заливали файлы после майкрософтовского офисного пакета), image/gif, image/png

В файле .htaccess пишем (RewriteEngine уже должен быть "on"):
Code (any language): скопировать код в буфер обмена
## Thumbnails2
#
  RewriteRule ^includes\/thumb.php$ includes\/thumb.php [L]
  RewriteCond %{QUERY_STRING} w=[0-9]+ [OR]
  RewriteCond %{QUERY_STRING} h=[0-9]+ [OR]
  RewriteCond %{QUERY_STRING} ^tc?$
  RewriteRule ^(.*)\.(jpg|gif|png) includes\/thumb.php?name=%{REQUEST_FILENAME}&%{QUERY_STRING} [NC,L]
..И добавляем файл thumb.php в папку /includes
  
Теперь, если в браузере написать адрес картинки с параметрами GET - сервер выдаст измененную картинку

Рассмотрим параметры GET. Они таковы:
Code (any language): скопировать код в буфер обмена
?[w=xx][h=xx][c]|[t[c]]
Здесь:
w (width) -- ширина, в которую надо вписать
h (height) -- высота, в которую надо вписать
Если указан только один параметр, то сделает по нему, например картинку надо вписать в высоту 100, тогда пишем ?h=100 и все
Если вписать без обрезки в рамку, например 150х100, то пишем ?w=150&h=100 --- впишет по максимальной подходящей размерности

Дальше больше.
Если нужно "жестко" вписать в рамку, например сделать картинку 100х100, чтоб заполняла все пространство (обрезка), то пишем
?w=100&h=100&c
Здесь параметр "c" (crop) указывает на то, что надо картинку уменьшить и обрезать по рамке
И просто превью с размерами по умолчанию можно сделать если написать
?t -- вписывание в рамку по умолчанию
?tc -- обрезка по рамке с размерами по умолчанию

Параметры можно комбинировать.

Размеры превью по умолчанию задаются в самом thumb.php (сейчас 150х150)
Запись превью на диск разрешается, если в сессии определена переменная THUMB

Далее приведены возможные форматы имен создаваемых на диске превью (опять же, если превью разрешено сохранять на диск), в зависимости от заданных параметров.
Пусть оригинальный файл -- image.jpg и размер его 800х600 и вот параметры:
Code (any language): скопировать код в буфер обмена
Здесь размеры после image_ - это реальный рамер картинки после уменьшения.

Как работает thumb.php
1. Смотрит, есть ли указанный оригинальный файл. Если нет, то ничего не делает.
2. Вычисляет размеры превью по параметрам и определяет имя файла превью
3. Смотрит, есть ли такой файл превью, если есть и дата его создания позже даты создания оригинала, то выдает превью, иначе создает превью заново.
4. Выдает превью и сохраняет, если надо.

Посмотреть и поиграть с параметрами можно здесь: t.8080.spb.ru/i/17.jpg
Это ссылка на оригинальный файл, если туда добавить описанные выше параметры, то соответственно, выдаст, что спросили.

Что мы получили?
- Разрешаем пользователю заливать в CMS все что угодно, но на странице сайта выводим картинки только нужного размера.
- Простое решение для средне-мелких сайтов

Данное решение работает на GD

Что еще можно (вариации для размышления):
Можно расширить список типов фалов в пределах GD
Можно добавить автоматическое удаление всех превью, если оригинальный файл изменился, хотя этот пункт лучше отдать на откуп CMS
Можно создавать simlink для превью с нужными именами, когда например запросы ?w=100&h=100 и w=101&h=100 приводят к одинаковому результату
Можно расширить, если есть симлинки, так, чтобы RewriteEngine сам проверял по параметрам в запросе наличие файла и обходил скрипт

Спасибо за внимание. Буду рад если это пригодится.

UPD 2011-01-16: Теперь файл лежит здесь:


thumb.rar
 Description:
Выдача превью (thumbnails) картинок на лету

Download
 Filename:  thumb.rar
 Filesize:  1.39 KB
 Downloaded:  1289 Time(s)



Last edited by Дмитрий Герасимов on Sun Jan 16, 2011 11:51 pm; edited 4 times in total
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jul 10, 2009 10:02 pm (спустя 1 час 21 минуту; написано за 1 минуту 3 секунды)
   Post subject:
Reply with quote

Красиво. Немного похоже на вот это forum.dklab.ru/viewtopic.php?t=23038, но более узко специализировано, потому и лаконично.
Back to top
View user's profile Send private message
Дмитрий Герасимов
Заглянувший



Joined: 04 Oct 2008
Posts: 13
Карма: 6
   поощрить/наказать

Location: Санкт-Петербург

PostPosted: Fri Jul 10, 2009 11:00 pm (спустя 58 минут; написано за 12 минут 51 секунду)
   Post subject:
Reply with quote

Rumata wrote:
Красиво. Немного похоже на вот это forum.dklab.ru/viewtopic.php?t=23038, но более узко специализировано, потому и лаконично.
Действительно, похоже.
Видимо недостаточно внимательно просмотрел топики, хотя интересовался подобными идеями.
Какое-то пространство мыслей все-таки существует.
Но здесь еще есть идея прозрачной прослойки, созданной таким образом на сервере, что когда указываем удаленный файл через URL с параметрами в fopen(), например, то получаем уже преобразованную инстанцию, без задействования дополнительных скриптов. Такое поведение в рамках создания глобальной базы знаний (вроде web 2.0) считаю целесообразным.
Спасибо.
Back to top
View user's profile Send private message
and
Заглянувший



Joined: 21 Oct 2009
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Wed Oct 21, 2009 3:25 pm (спустя 3 месяца 10 дней 16 часов 24 минуты; написано за 56 секунд)
   Post subject:
Reply with quote

есть класс старый phpThumb, он умеет еще эффекты применять, схема работы такая же, урл-реврайтинг делается за 5 секунд руками.
Back to top
View user's profile Send private message
AD
Заглянувший



Joined: 23 Sep 2007
Posts: 8
Карма: -1
   поощрить/наказать


PostPosted: Thu Oct 22, 2009 2:49 pm (спустя 23 часа 23 минуты; написано за 1 минуту 40 секунд)
   Post subject:
Reply with quote

при большом кол-ве картинок (и их значительном размере) все это дело начинает тормозить... возникают проблемы с header'ами ...
сам довольно долго пользовал похожее решение у себя..... но недавно переделал не в динамику ...а автоматом создание нужных маленьких превьюшек...
Back to top
View user's profile Send private message
WEBsoul
Guest





Карма: 386
   поощрить/наказать


PostPosted: Mon Nov 16, 2009 5:45 pm (спустя 25 дней 2 часа 56 минут; написано за 13 секунд)
   Post subject: не воспринимает в .htaccess
Reply with quote

не воспринимает в .htaccess
Back to top
digitiz
Заглянувший



Joined: 19 Nov 2009
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Thu Nov 19, 2009 3:20 pm (спустя 2 дня 21 час 34 минуты; написано за 4 минуты 35 секунд)
   Post subject:
Reply with quote

Огромнейшее спасибо автору за скрипт!!!
Очень помог!
А кто подскажет, как этому скрипту скормить картинку с другого сайта?

Смысл таков - скрипт установлен у меня на хостинге, нужно сделать в браузере превью на изображение с другого сайта по имеющемуся прямому линку.
Как это все прописать в адресной строке (т.е. адрес на скрипт + адрес на само изображение + параметры ресайза) или подскажите как это в тег img запихнуть?
Back to top
View user's profile Send private message
skorpion
Заглянувший



Joined: 31 May 2011
Posts: 3
Карма: 0
   поощрить/наказать

Location: Москва

PostPosted: Tue May 31, 2011 3:31 pm (спустя 1 год 6 месяцев 12 дней 11 минут; написано за 8 минут 12 секунд)
   Post subject:
Reply with quote

Здравствуйте Дмитрий Герасимов.

Прошу помощи с вашим классом.
Он как раз то что мне нужно, но нет одной функции, а именно поворота картинки.

добавл "rotate"
тоесть запрос вывода фотографии с новым последним параметром: thumb.php?name=IMG_0964.JPG&w=350&h=150&c&rotate=-90

Вот эта цифра "-90" - вытаскивается из фотографии на основе ориентации фотоаппарата.

Всё крутится, но если изображение в оригинале сфотографировано на боку, то при разворачивании изображения появляется черная полоса. В других случаях всё работает идеально.
Помогите пожалуйста адаптировать.

Вот, то что у меня. Где исправить?
Code (php): скопировать код в буфер обмена
<?php
class Thumbnail
{
    private $w;
    private $h;
    private $filename;
    private $crop;
   
    private $_mime_settings;
    private $_fsave_allowed;
    private $_tname_tpl         = '%s_%sx%s';
    private $_default_width     = 150;
    private $_default_height    = 150;
    private $_jpeg_quality      = 90;
    private $_sess_varname      = 'THUMB';
//ДОБАВЛЕНО
    private $_default_rotate     = 0;
//ДОБАВЛЕНО
   
    public function __construct()
    {
        session_start (www.php.net/session_start)();
       
        $this->w = abs (www.php.net/abs)((int)@$_GET['w']);
        $this->h = abs (www.php.net/abs)((int)@$_GET['h']);
        if (!$this->w && !$this->h) {
            // вписать в рамку по умолчанию
            $this->w = $this->_default_width;
            $this->h = $this->_default_height;
        }
        $this->filename = @$_GET['name'];

        $this->crop = isset (www.php.net/isset)($_GET['c']) || isset (www.php.net/isset)($_GET['tc']);


        $this->_mime_settings = array (www.php.net/array)(
            'image/gif'  => array (www.php.net/array)(
                'ext'       => '.gif',
                'create'    => 'imagecreatefromgif',
                'save'      => array (www.php.net/array)(&$this, '_gif_save'),
            ),
            'image/jpeg'  => array (www.php.net/array)(
                'ext'       => '.jpg',
                'create'    => 'imagecreatefromjpeg',
                'save'      => array (www.php.net/array)(&$this, '_jpeg_save'),
            ),
            'image/pjpeg'  => array (www.php.net/array)(
                'ext'       => '.jpg',
                'create'    => 'imagecreatefromjpeg',
                'save'      => array (www.php.net/array)(&$this, '_jpeg_save'),
            ),
            'image/png'  => array (www.php.net/array)(
                'ext'       => '.png',
                'create'    => 'imagecreatefrompng',
                'save'      => array (www.php.net/array)(&$this, '_png_save'),
            ),
        );
       
        $this->_fsave_allowed = isset (www.php.net/isset)($_SESSION[$this->_sess_varname]);
       
        $this->_run();
    }
    private function _run()
    {


//ДОБАВЛЕНО
        $new_rotate_tmp = $_GET['rotate'];
        if (!$new_rotate_tmp) {
                $new_rotate_tmp = $default_rotate;
        }
        $new_rotate = $new_rotate_tmp;
//ДОБАВЛЕНО

        if (!file_exists (www.php.net/file_exists)($this->filename) || !is_file (www.php.net/is_file)($this->filename)) exit (www.php.net/exit);
        $info = getimagesize (www.php.net/getimagesize)($this->filename);
        if (!$info || !isset (www.php.net/isset)($this->_mime_settings[$info['mime']])) {
            // можно возвращать дефолтную картинку
            // .. и удалять лишние картинки
            //$files = glob("{$name}_*{$ext}");
            //glob("*.txt")

            exit (www.php.net/exit);
        }
        $settings =& $this->_mime_settings[$info['mime']];
       
        $orig_width  = $info[0];
        $orig_height = $info[1];
        $dst_x = $dst_y = 0;
       
        if (!$this->w) {
            // вписываем по высоте
            $new_width  = $this->w = floor (www.php.net/floor)($orig_width * $this->h / $orig_height);
            $new_height = $this->h;
        }
        elseif (!$this->h) {
            // вписываем по ширине
            $new_width  = $this->w;
            $new_height = $this->h = floor (www.php.net/floor)($orig_height * $this->w / $orig_width);
        }
        elseif ($this->crop) {
            // вписываем с обрезкой

            $scaleW = $this->w / $orig_width;
            $scaleH = $this->h / $orig_height;
            $scale = max (www.php.net/max)($scaleW, $scaleH);
            $new_width  = floor (www.php.net/floor)($orig_width * $scale);
            $new_height = floor (www.php.net/floor)($orig_height * $scale);
            $dst_x = floor (www.php.net/floor)(($this->w - $new_width) / 2);
            $dst_y = floor (www.php.net/floor)(($this->h - $new_height) / 2);
        }
        else {
            // вписываем без обрезки
            $scaleW = $this->w / $orig_width;
            $scaleH = $this->h / $orig_height;
            $scale = min (www.php.net/min)($scaleW, $scaleH);
            $new_width  = $this->w = floor (www.php.net/floor)($orig_width * $scale);
            $new_height = $this->h = floor (www.php.net/floor)($orig_height * $scale);
        }
       
        if ($this->w > $orig_width || $this->h > $orig_height) {
            header (www.php.net/header)('Content-type: ' . $info['mime']);
            readfile (www.php.net/readfile)($this->filename);
            exit (www.php.net/exit);
        }
       
       // $this_filename = imagerotate($this->filename, $new_rotate, 0);

        $thumbFilename = dirname (www.php.net/dirname)($this->filename) . '/'
            . sprintf (www.php.net/sprintf)($this->_tname_tpl, basename (www.php.net/basename)($this->filename, $settings['ext']), $this->w, $this->h)
            . $settings['ext']
        ;
       
        if (file_exists (www.php.net/file_exists)($thumbFilename) && filemtime (www.php.net/filemtime)($thumbFilename) >= filemtime (www.php.net/filemtime)($this->filename)) {
            header (www.php.net/header)('Content-type: ' . $info['mime']);
            readfile (www.php.net/readfile)($thumbFilename);
            exit (www.php.net/exit);
        }




        $orig_img = call_user_func (www.php.net/call_user_func)($settings['create'], $this->filename);
//ДОБАВЛЕНО
        $orig_img = imagerotate($orig_img, $new_rotate, 0);
//ДОБАВЛЕНО
        $tmp_img  = imagecreatetruecolor($this->w, $this->h);
        // Copy and resize old image into new image
        imagecopyresampled(
            $tmp_img, $orig_img,
            $dst_x, $dst_y,
            0, 0, /*лево_право верх_низ*/
            $new_width, $new_height,
            $orig_width, $orig_height
        );



        imagedestroy($orig_img);
        header (www.php.net/header)('Content-type: ' . $info['mime']);
        call_user_func (www.php.net/call_user_func)($settings['save'], $tmp_img, $thumbFilename);
        imagedestroy($tmp_img);
        exit (www.php.net/exit);
    }
   
    private function _gif_save($img, $filename = false)
    {
        if ($filename !== false && $this->_fsave_allowed) imagegif($img, $filename);
                imagegif($img);
    }
   
    private function _jpeg_save(&$img, $filename = false)
    {
        if ($filename !== false && $this->_fsave_allowed) imagejpeg($img, $filename, $this->_jpeg_quality);
                imagejpeg($img, '', $this->_jpeg_quality);
    }
   
    private function _png_save($img, $filename = false)
    {
        if ($filename !== false && $this->_fsave_allowed) imagepng($img, $filename);
                imagepng($img);
    }
   
}
new Thumbnail;
?>
Back to top
View user's profile Send private message
Дмитрий Герасимов
Заглянувший



Joined: 04 Oct 2008
Posts: 13
Карма: 6
   поощрить/наказать

Location: Санкт-Петербург

PostPosted: Thu Jun 02, 2011 2:07 am (спустя 1 день 10 часов 35 минут; написано за 26 минут 21 секунду)
   Post subject:
Reply with quote

skorpion wrote:
при разворачивании изображения появляется черная полоса
Не совсем понял про ориентацию фотоаппарата, но я вижу проблему так:
Картинка может иметь альбомную или портретную ориентацию или быть квадратной. Пусть будет альбомная с размерами 400х300 - это размеры холста, в который помещено изображение такого же размера, т.е. изображение полностью покрывает холст. Функция imagerotate поворачивает изображение, но не трогает холст, поэтому появляются дыры. При повороте на 90 градусов новый размер изображения станет 300х400, а размер холста останется 400х300.

В скрипте, для изменения размеров картинки мы создаём новый уменьшенный холст и помещаем туда уменьшенное изображение.

Если мы поворачиваем на 90 градусов, то мы должны плясать уже от размеров 300х400 а не 400х300, т.е. перед вычислением размеров нового холста, мы должны поменять местами оригинальные ширину и высоту картинки.

В общем случае, можно принять, что мы всегда будем поворачивать картинку на угол, кратный 90 градусам и передавать в скрипт не величину угла, а количество поворотов.
Передавать, например, параметром r, который будет принимать значения от нуля до трёх. Если r=1, то угол будет равным 90, если r=2, то 180 градусов, и т.д.
Если мы получили нечетное количество поворотов, то мы должны поменять местами значения переменных $orig_width и $orig_height и сделать это сразу после инициализации этих переменных.
Код может быть такой
Code (php): скопировать код в буфер обмена
//
$orig_width  = $info[0];
$orig_height = $info[1];
$dst_x = $dst_y = 0;

//
//
$r_num = intval (www.php.net/intval)(-@$_GET['r']) % 4;
if ($r_num % 2 && $orig_width != $orig_height) {
    list($orig_width, $orig_height) = array (www.php.net/array)($orig_height, $orig_width);
}
И потом, при повороте указать (см. код из предыдущего поста)
Code (php): скопировать код в буфер обмена
$orig_img = imagerotate($orig_img, $r_num * 90, 0);
Так же не забыть сделать замену
Code (php): скопировать код в буфер обмена
// Вот этот блок
if ($this->w > $orig_width || $this->h > $orig_height) {
    header (www.php.net/header)('Content-type: ' . $info['mime']);
    readfile (www.php.net/readfile)($this->filename);
    exit (www.php.net/exit);
}

// Заменить на этот
if (!$r_num && ($this->w > $orig_width || $this->h > $orig_height)) {
    header (www.php.net/header)('Content-type: ' . $info['mime']);
    readfile (www.php.net/readfile)($this->filename);
    exit (www.php.net/exit);
}
И убрать первые два добавленных блока )

Ещё надо позаботиться о сохранении файлов на диск, т.е. в имя добавлять значение поворота.
Back to top
View user's profile Send private message
skorpion
Заглянувший



Joined: 31 May 2011
Posts: 3
Карма: 0
   поощрить/наказать

Location: Москва

PostPosted: Thu Jun 02, 2011 3:01 am (спустя 53 минуты; написано за 5 минут 30 секунд)
   Post subject:
Reply with quote

Дмитрий Герасимов Спасибо большое за ответ.
Поменял код как указанно... но что то поворот не так как хотеось бы срабатывает...

По поводу поворота, то эта информация берется из фотографии стандартной функцией exif_read_data

вот:
Code (php): скопировать код в буфер обмена
        //
        $exif_data = exif_read_data (www.php.net/exif_read_data) ( $data[$i]['filename'] ); //

        //
        $orientation_calc = $exif_data['Orientation'];
            switch($orientation_calc)
            {
                case 1: //
                        $orientation_calc = "  ";
                        $angle = "0";
                break;

                case 2: //
                        $orientation_calc = " ";
                        $angle = "0";
                break;
                                       
                case 3: //
                        $orientation_calc = "180  ";
                        $angle = "180";
                break;
                           
                case 4: //
                        $orientation_calc = " ";
                        $angle = "0";
                break;
                       
                case 5: //
                        $orientation_calc = "  + 90  ";
                        $angle = "90";
                break;
                       
                case 6: //
                        $orientation_calc = "-90  ";
                        $angle = "-90";
                break;
                       
                case 7: //
                        $orientation_calc = "  + 90  ";
                        $angle = "-90";
                break;
                       
                case 8: //
                        $orientation_calc = "90  ";
                        $angle = "90";
                break;
            }
        //

        //
        $miniimages = "thumb.php?name={$data[$i]['filename']}&w=350&h=150&c&rotate={$angle}";
вот конкретная фотография с углом поворота сьёмки под номером 6 - "повернуть вправо на -90" - так определяет переменная $orientation_calc
cms2.ssfera.ru/gps3/thumb2.php?name=IMG_0964.JPG&w=350&h=150&c&rotate=-90 имеет параметр &rotate=-90
cms2.ssfera.ru/gps3/thumb2.php?name=IMG_0964.JPG&w=350&h=150&c&rotate=0 имеет параметр &rotate=0
cms2.ssfera.ru/gps3/thumb2.php?name=IMG_0964.JPG&w=350&h=150&c&rotate=90 имеет параметр &rotate=90
cms2.ssfera.ru/gps3/thumb2.php?name=IMG_0964.JPG&w=350&h=150&c&rotate=180 имеет параметр &rotate=180
Back to top
View user's profile Send private message
skorpion
Заглянувший



Joined: 31 May 2011
Posts: 3
Карма: 0
   поощрить/наказать

Location: Москва

PostPosted: Thu Jun 02, 2011 3:21 am (спустя 19 минут; написано за 4 минуты 59 секунд)
   Post subject:
Reply with quote

Понял...
Теперь переворот не по углам 0, 90, 180, -90, -180 градусов производится, а по цифрам -3, -2, -1, 0, 1, 2, и 3.

Спасибо большое за помощь!

Попробую переписать под новые цифры переменную $orientation_calc - $angle.
Если будет возможность, то подскажите как в обычных градусах указывать переворот.
Back to top
View user's profile Send private message
ckjet
Заглянувший



Joined: 17 Jun 2011
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Fri Jun 17, 2011 11:27 am (спустя 15 дней 8 часов 5 минут; написано за 1 минуту 30 секунд)
   Post subject:
Reply with quote

Здравствуйте Дмитрий Герасимов.

У меня возник такой вопрос: можно ли Ваш класс использовать для жесткой подгоник под рамку? Например у нас картинка 700 на 1000 а нада подогнать к 200 на 200 чтоб заполнялся весь блок размером 200 на 200 картинкой.
Back to top
View user's profile Send private message
Дмитрий Герасимов
Заглянувший



Joined: 04 Oct 2008
Posts: 13
Карма: 6
   поощрить/наказать

Location: Санкт-Петербург

PostPosted: Sat Jun 18, 2011 12:12 am (спустя 12 часов 45 минут; написано за 3 минуты 12 секунд)
   Post subject:
Reply with quote

ckjet wrote:
можно ли Ваш класс использовать для жесткой подгоник под рамку?
Да. Можно. За это отвечает параметр "c" (crop). Посмотрите описание параметров в самом первом посте.
Получится примерно так:
Code (html): скопировать код в буфер обмена
<img (december.com/html/4/element/img.html) src="image.jpg?w=200&h=200&c"/> (december.com/html/4/element/.html)
Back to top
View user's profile Send private message
ckjet
Заглянувший



Joined: 17 Jun 2011
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Thu Jun 30, 2011 1:16 pm (спустя 12 дней 13 часов 3 минуты; написано за 40 секунд)
   Post subject:
Reply with quote

Спасибо, не заметил. А Вы тестировали с большим кол-вом изображений на странице(от 30 и выше)
Back to top
View user's profile Send private message
hav0k
Заглянувший



Joined: 22 Sep 2011
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Thu Sep 22, 2011 1:46 am (спустя 2 месяца 21 день 12 часов 29 минут; написано за 7 минут 2 секунды)
   Post subject:
Reply with quote

Скрипт просто находка для меня, что я только не делал чтобы запустить. Думал дело в gd, пытался заново откомпилировать php, но безрезультатно. Подсунул просто библиотеку gd.so, но эфекта не дало. Кучу раз пересматривал код, вроде всё норм.

а дело то оказалось

    private function _jpeg_save(&$img, $filename = false)
    {
        if ($filename !== false && $this->_fsave_allowed) imagejpeg($img, $filename, $this->_jpeg_quality);
        imagejpeg($img, '', $this->_jpeg_quality);
    }

Большое спасибо автору скрипта, а для меня это урок на внимательность. Буду делать фото галерею с результатами поделюсь.
Back to top
View user's profile Send private message
koldungsm
Заглянувший



Joined: 18 Mar 2013
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Mon Mar 18, 2013 12:05 am (спустя 1 год 5 месяцев 25 дней 22 часа 19 минут; написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

Почему то не работает, всё сделал по инструкции и GD на хостинге имеется, хостинг Reg.ru
Что за беда?
Ну очень надо, прям скриптец в тему!!!!!!!!
Помогите плиз!!!!!!!!!!!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML