imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 28.11.2005, 22:23     # 1
NoKawaii
Newbie
 
Аватар для NoKawaii
 
Регистрация: 31.01.2003
Сообщения: 37

NoKawaii Нимб уже пробиваетсяNoKawaii Нимб уже пробивается
Нужен алгоритм создания тумнейла.

Помогите с элементарным алгоритмом для создания тумбнейла (маленького изображения) при аплодинге файла (аплод через обычную форму загрузки), что-бы не создавать отдельно изображение вручную.
Заранее благодарен.
NoKawaii вне форума  
Старый 28.11.2005, 22:51     # 2
Al-x
Junior Member
 
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Алгоритм (примерно так):
Код:
1. Проверяем, прошла ли загрузка файла успешно?
Если файл не загружен - выходим с  ошибкой.
2. Проверяем, загруженный файл изображение? 
Если нет - то выходим с ошибкой.
3. Получаем размер загруженного изображения.
4. Создаём новое изображение желаемого размера.
5. "Вливаем" загруженное изображение в новое.
6. Создаем имя для превьюшки. Если такого файла не существует, записываем на диск, иначе - повторяем до победного конца :)
И всё-таки скрипт (а не алгоритм) нужен?
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию
Al-x вне форума  
Старый 29.11.2005, 01:16     # 3
Stasik
Registered User
 
Аватар для Stasik
 
Регистрация: 27.03.2002
Адрес: дома
Сообщения: 1 660

Stasik Известность не заставит себя ждатьStasik Известность не заставит себя ждать
ладно... умничать не буду .... дам код:

PHP код:
<?
//файл передаёшь стандартной формой..... там енкод мултипарт не забудь <input name="userfile" type="file" />
//(C) [stasik.com]
$dir="/home/user/public_html/fotos/"//0777

//тут можно ещё и preg_replace`ом почистить.....
$uploadfile $dir basename($_FILES['userfile']['name']);
$uploadfile strtolower($uploadfile);
$uploadthumb $dir basename($_FILES['userfile']['name']);
$uploadthumb strtolower($uploadthumb);

//есть файл или нет
if(file_exists($uploadfile)){echo "Filename already exists or no file. Rename or think a bit longer."; exit;};

if (
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
   echo 
"Ok file is here, lets look at it:\n<br>";
} else {
   echo 
"Possible file upload attack!\n"; exit;
}

//смотрим файл
$result_array getimagesize($uploadfile);

//фотки думаю, только в жпег заливают
if ($result_array !== false) {
   
$mime_type $result_array['mime'];
   switch(
$mime_type) {
       case 
"image/jpeg":
           echo 
"jpeg... ok";
           break;
       default:
           echo 
"image, but no jpeg, deleted"; @unlink($uploadfile); exit;
   }
} else {
   echo 
"file is not a valid image file, deleted"; @unlink($uploadfile); exit;


//размерчики
$width=$result_array[0];
if(
$width>3000){echo "too big, deleted."; @unlink($uploadfile); exit;}
if(
$height>3000){echo "too big, deleted."; @unlink($uploadfile); exit;}

//думаем о размерчиках нэйла (тут сам ломай голову.. я так сделал просто и сердито, но с пропорциями иногда траблы)
if($height>=$width){
$factor=125/$width;
}else{
$factor=95/$height;
}

$nwidth=round($width*$factor);
$nheight=round($height*$factor);

//resize on linux тоже quick&dirty можно и imgmagick... хмм и gd может тоже
$tmpimg tempnam($dir"TEMP");
system("djpeg $uploadfile >$tmpimg");
system("pnmscale -xy $nwidth $nheight $tmpimg | cjpeg -smoo 10 -qual 50 >$uploadthumb");

unlink($tmpimg);

//усё
?>
__________________
Всё будет хорошо!

Последний раз редактировалось Stasik; 29.11.2005 в 01:24.
Stasik вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 02:25.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.