IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Нужен алгоритм создания тумнейла. (http://www.imho.ws/showthread.php?t=96688)

NoKawaii 28.11.2005 22:23

Нужен алгоритм создания тумнейла.
 
Помогите с элементарным алгоритмом для создания тумбнейла (маленького изображения) при аплодинге файла (аплод через обычную форму загрузки), что-бы не создавать отдельно изображение вручную.
Заранее благодарен.

Al-x 28.11.2005 22:51

Алгоритм (примерно так):
Код:

1. Проверяем, прошла ли загрузка файла успешно?
Если файл не загружен - выходим с  ошибкой.
2. Проверяем, загруженный файл изображение?
Если нет - то выходим с ошибкой.
3. Получаем размер загруженного изображения.
4. Создаём новое изображение желаемого размера.
5. "Вливаем" загруженное изображение в новое.
6. Создаем имя для превьюшки. Если такого файла не существует, записываем на диск, иначе - повторяем до победного конца :)

И всё-таки скрипт (а не алгоритм) нужен? :)

Stasik 29.11.2005 01:16

ладно... умничать не буду ;) .... дам код:

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);

//усё
?>



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

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