Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Создание thumbnails

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

kommersant



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересует вот такой вопрос господа, чем вы создаете thumbnail`s (маленькие копии картинок).
 
Пользователь загружает картинку 500 х 300, нужно вывести маленькую картинку 60 х 60.
 
Сейчас использую какой-то сторонний класс, но качество получается очень плохое.
Есть ли еще какие-нибудь способы, программные средства, методы или классы для создания thumb`s?

Всего записей: 107 | Зарегистр. 27-05-2003 | Отправлено: 13:41 10-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PHP FAQ: Как сделать уменьшенную копию картинки?

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 13:52 10-01-2005
kommersant



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 SiMM Это не актуально, и слишком легко... объясняю
 
В GD1, поддерживающей только изображения на основе палитры, присуствовала лишь функция imagecopyresized(); качество уменьшенных изображений, генерируемых этой ей, мягко говоря, оставляло желать лучшего: работая с фиксированной палитрой, ограниченной 255 цветами, весьма затруднительно обеспечить качественный антиалиасинг.  
 
Во второй версии библиотеки, с появлением поддержки TrueColor и imagecreatetruecolor(), введена новая функция - imagecopyresampled(), обеспечивающая весьма достойное качество "превьюшек".  
 
 
Собственно на хостинге стоит 4 php собранный с GD1, о том что пора бы уже перейти на 5 php и собрать его с GD2, там понятия не имеют. Вариант с изменением хостинга не катит.  
 
Поэтому ищем нелегкие пути...

Всего записей: 107 | Зарегистр. 27-05-2003 | Отправлено: 14:00 10-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет никакой связи между PHP5 и GD2 - сколько сижу на 4ке - ниразу GD1 не видел.
Цитата:
Вариант с изменением хостинга не катит.
Тогда забей. На таком дебильном хостинге, где по просьбе хостящего, который деньги отстёгивает, не могут обновить PHP (даже на 4.3.10) врядли доступен exec и врядли есть imagemagic.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 14:34 10-01-2005
zalexf



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
kommersant
написал я когда-то скриптик на PHP, который считывает картинку из MySQL, сжимает по ширине/высоте до требуемого размера и выводит.... все еще надо?
а вообще это не правильно - хранить картинки в MySQL и потом их на лету ресайзить....

Всего записей: 102 | Зарегистр. 21-10-2002 | Отправлено: 14:50 12-01-2005
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть в линухе ImageMagick...
Вот им и пользуюсь (ф-ция convert)

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 15:49 12-01-2005
zalexf



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mamay
интересная штука! с интересом качаю....

Всего записей: 102 | Зарегистр. 21-10-2002 | Отправлено: 19:44 12-01-2005
Farkhad



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я один раз видел вообще чудеса техники просто никаких thumbnails вставляешь просто <img src=... width=60 height=80> вот так вот

Всего записей: 731 | Зарегистр. 03-08-2001 | Отправлено: 20:26 12-01-2005
Swappp

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Farkhad

Цитата:
Я один раз видел вообще чудеса техники просто никаких thumbnails вставляешь просто <img src=... width=60 height=80> вот так вот

Только вот качается вся картинка... и если это галерея с фотками или обоями 1600X1200, врядли зашедший обрадуется

Всего записей: 1716 | Зарегистр. 02-11-2001 | Отправлено: 20:36 12-01-2005
Farkhad



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Swappp
Это все понятно, просто тот сайт был не слишком загружен, там оригиналы едва превосходили 200 пикселей...
 
А так данный вопрос на столько изъезжен...
Какие решения я слыхал:
 
1. ImageMagic
2. Через GD генерить превьюшки либо при загрузке админом рисунка (т.е. сразу же делаем новый файл), либо при выводе генерируем превьюшки каждый раз для нового юзера (это накладно).
3. Присобачиваем вручную превьюшку.

Всего записей: 731 | Зарегистр. 03-08-2001 | Отправлено: 20:49 13-01-2005
alexhemp



упал с пальмы
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Farkhad
Я использую ImageCopyResampled + кэширую ее результаты, чтобы следующему клиенту просто через readfile отдать.

Всего записей: 1945 | Зарегистр. 13-12-2001 | Отправлено: 21:23 13-01-2005
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
+ кэширую ее результаты, чтобы следующему клиенту просто через readfile отдать.
 

Тоже но с ImageMagick...

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 10:33 14-01-2005
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Цитата:

Цитата:
 
+ кэширую ее результаты, чтобы следующему клиенту просто через readfile отдать.  
 

 
Тоже но с ImageMagick...

 
То же, но без readfile. На готовый thumbnail я переадресоваваю с помощью mod_rewrite. В этом случае PHP вообще не используется.
 
 

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 12:36 14-01-2005
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
NetPBM.

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 07:55 17-01-2005
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день,
 
Вот наткрулся на очень хорошую статью Сложное масштабирование изображений в PHP.
 
А так же сделал функию.
Подробнее...
 
Добавлено:
Invisionboard, на мой взгляд, изменяет размеры картинок наилучшим образом. То есть там отсутствует "обрезание", кака по ссылке выше.
 
Порывшись в исходниках нашел класс по работе с графикой: ips_kernel/class_image.php.
 
Но при его использовании все равно получаются "пропорциональные" превьюшки. (Выше  для получения определенного строго фиксированного размера исходник перед уменьшением резался.) Но при использовании на форуме полуачются все одного размера ... Пародокс, точнее что-то упустил ...

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 23:06 14-02-2006
russianczar



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот суперская статья (http://icant.co.uk/articles/phpthumbnails/), автор всё объяснил очень подробно, всё четко, ясно (короче, для новичков это супер статья, мне помогла разобраться)  
 
Скрипт этот создает thumbnails с припиской tn_... =)сохраняет пропорцию
 

Код:
 
<?php
 Error_Reporting(E_ALL & ~E_NOTICE);
$imagefolder='.';
$thumbsfolder='.';
$pics=directory($imagefolder,"jpg,JPG,JPEG,jpeg,png,PNG");
$pics=ditchtn($pics,"tn_");
if ($pics[0]!="")
{
    foreach ($pics as $p)
    {
        createthumb($p,"tn_".$p,130,130);
    }
}
 
/*
    Function ditchtn($arr,$thumbname)
    filters out thumbnails
*/
function ditchtn($arr,$thumbname)
{
    foreach ($arr as $item)
    {
        if (!preg_match("/^".$thumbname."/",$item)){$tmparr[]=$item;}
    }
    return $tmparr;
}
 
/*
    Function createthumb($name,$filename,$new_w,$new_h)
    creates a resized image
    variables:
    $name        Original filename
    $filename    Filename of the resized image
    $new_w        width of resized image
    $new_h        height of resized image
*/
function createthumb($name,$filename,$new_w,$new_h)
{
    $system=explode(".",$name);
    if (preg_match("/jpg|jpeg/",$system[1])){$src_img=imagecreatefromjpeg($name);}
    if (preg_match("/png/",$system[1])){$src_img=imagecreatefrompng($name);}
    $old_x=imageSX($src_img);
    $old_y=imageSY($src_img);
    if ($old_x > $old_y)
    {
        $thumb_w=$new_w;
        $thumb_h=$old_y*($new_h/$old_x);
    }
    if ($old_x < $old_y)
    {
        $thumb_w=$old_x*($new_w/$old_y);
        $thumb_h=$new_h;
    }
    if ($old_x == $old_y)
    {
        $thumb_w=$new_w;
        $thumb_h=$new_h;
    }
    $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    if (preg_match("/png/",$system[1]))
    {
        imagepng($dst_img,$filename);
    } else {
        imagejpeg($dst_img,$filename);
    }
    imagedestroy($dst_img);
    imagedestroy($src_img);
}
 
/*
        Function directory($directory,$filters)
        reads the content of $directory, takes the files that apply to $filter
        and returns an array of the filenames.
        You can specify which files to read, for example
        $files = directory(".","jpg,gif");
                gets all jpg and gif files in this directory.
        $files = directory(".","all");
                gets all files.
*/
function directory($dir,$filters)
{
    $handle=opendir($dir);
    $files=array();
    if ($filters == "all"){while(($file = readdir($handle))!==false){$files[] = $file;}}
    if ($filters != "all")
    {
        $filters=explode(",",$filters);
        while (($file = readdir($handle))!==false)
        {
            for ($f=0;$f<sizeof($filters);$f++):
                $system=explode(".",$file);
                if ($system[1] == $filters[$f]){$files[] = $file;}
            endfor;
        }
    }
    closedir($handle);
    return $files;
}
?>
 


----------
Славься страна, мы гордимся тобой!

Всего записей: 595 | Зарегистр. 27-12-2003 | Отправлено: 23:25 28-08-2006
alexpopovpoland

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помощь нужна, господа!
 
Задачка такая:
В файловой системе /www/files/ (директории) лежат оригиналы изображений *.gif.
Необходимо при загрузке ПХП страницы создавать табличку с thumbnails этих *.gifов.
Однако сохранять сгенерированные thumbnails некуда, то есть надо работать с памятью ОЗУ и генерить табличку с thumbnails каждый раз при обращении пользователя к этой директории или другой.
 
GD2.0.28 , Apache2 , HP-UX - имеется.
 
С уважением,
Алексей Попов

Всего записей: 2 | Зарегистр. 27-11-2006 | Отправлено: 14:13 27-11-2006
vitovt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
мне вот интересно немного другое, на фоторесурсе mail.ru есть такая фича "Автоматический поворот фотографий
(для камер с датчиком ориентации)" так вот как оно определяет поворачивать или нет? вернее где в фотке узнать нужно повернуть или нет?

Всего записей: 1087 | Зарегистр. 02-05-2002 | Отправлено: 16:37 27-11-2006
Sergeant

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vitovt
Видимо, этот самый датчик ориентации пишет в EXIF сведения про угол поворота. Скриптом это дело из заголовков выдирается, а дальше - дело техники.
 
alexpopovpoland
Выше ведь есть код для генерации превьюшек. Или нужна другая модель велосипеда?

Всего записей: 1553 | Зарегистр. 06-08-2001 | Отправлено: 17:16 27-11-2006
alexpopovpoland

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sergeant
 
Велосипед в том, что сохранять на сервер тумбнайлсы некуда. много слишком места под них надо.

Всего записей: 2 | Зарегистр. 27-11-2006 | Отправлено: 17:25 27-11-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Создание thumbnails


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru