Създаване на Thumbnail изображение
Публикувана от smilev на January 12 2011 10:42:34

Разширена новина
1. Необходим е сървър с поддръжка на PHP и с налична GD библиотека.
2. Файловете които се подържат са jpg, jpeg и png.

<?php
//Дефиниране на максимален размер за качената картинка
define ("MAX_SIZE","100");
// Дефинирайте широчината и височината на малкото копие
define ("WIDTH","150");
define ("HEIGHT","100");

//Това е функцията, която ще създаде малкото копие от каченото изображение
// Оразмеряването ще бъде направено спрямо дефинираните широчината и височината,
//но без деформиране на изображението
function make_thumb($img_name,$filename,$new_w,$new_h)
{
//Получаване на разширението на снимката.
$ext=getExtension($img_name);
//Създава се ново изображение използваики подходяща функция от GD библиотеката
if(!strcmp("jpg",$ext) || !strcmp("jpeg",$ext))
$src_img=imagecreatefromjpeg($img_name);

if(!strcmp("png",$ext))
$src_img=imagecreatefrompng($img_name);

//Получаване на оразмеряването
$old_x=imageSX($src_img);
$old_y=imageSY($src_img);

// след което ще сметнем ново оразмеряване на малкото копие
// в следващите стъпки ще направим:
// 1. Смятаме съотношението, като заменим старото оразмеряване с ново.
// 2. Ако ширината е по-голяма, тя ще се промени до максимално зададената
// и височината така ще се сметне, че да не се развали оразмеряването.
// 3. В противен случай ще използваме височината на изображението
// като запазим оразмеряването.
$ratio1=$old_x/$new_w;
$ratio2=$old_y/$new_h;
if($ratio1>$ratio2) {
$thumb_w=$new_w;
$thumb_h=$old_y/$ratio1;
}
else {
$thumb_h=$new_h;
$thumb_w=$old_x/$ratio2;
}

// Създаваме нова картинка с новото оразмеряване
$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);

// оразмерете голямото изображение на новото и създаваме ново
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);

// Извеждаме създаденото изображение към файла. Сега ще имаме малко копие на файла $filename
if(!strcmp("png",$ext))
imagepng($dst_img,$filename);
else
imagejpeg($dst_img,$filename);

//Разрушава източника на изображението.
imagedestroy($dst_img);
imagedestroy($src_img);
}

// Тази функция чете разширението на файла.
// Тя е използвана да определи дали файла е картинка.
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

// Тази променлива е използвана като флаг.
//Стойността е инициализирана с 0 (Значи няма открити грешки)
//и ще се промени на 1 ако е намерена грешка. Тогава файла няма да се качи.
$errors=0;
// Проверява предадената информация от формата
if(isset($_POST['Submit']))
{
//Прочита името на файла които потребителят качва
$image=$_FILES['image']['name'];
// Ако не е било празно
if ($image)
{
// получава оригиналното име
$filename = stripslashes($_FILES['image']['name']);

// получаване на разширението на файла на ниско ниво
$extension = getExtension($filename);
$extension = strtolower($extension);
// Ако е с неизвестно разширение, ще изкара съобщение за грешка
//и файла няма да бъде качен.
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png"))
{
echo '<h1>Не известно разширение!</h1>';
$errors=1;
}
else
{
// Взимане на размера в байтове
// $_FILES['image']['tmp_name'] временното име на файла докато файла се качи на сървъра
$size=getimagesize($_FILES['image']['tmp_name']);
$sizekb=filesize($_FILES['image']['tmp_name']);

//Задаване на максимален размер в kb и изкарване на грешка ако се надвиши.
if ($sizekb > MAX_SIZE*10240)
{
echo '<h1>Надвишен е лимитът за размер!</h1>';
$errors=1;
}

//за име задаваме времето в което е качен файла в UNIX времеви формат
$image_name=time().'.'.$extension;
//картинката ще се запише с новото име в зададената папка (images папката)
$newname="images/".$image_name;
$copied = copy($_FILES['image']['tmp_name'], $newname);
//Ако картинката се качи но не се копира малкото копие да изкара грешка
if (!$copied)
{
echo '<h1>Копирането не е успешно!</h1>';
$errors=1;
}
else
{
// Новият thumbnail ще се намира в папка images/thumbs/
$thumb_name='images/thumbs/thumb_'.$image_name;
// call the function that will create the thumbnail. The function will get as parameters
//the image name, the thumbnail name and the width and height desired for the thumbnail
$thumb=make_thumb($newname,$thumb_name,WIDTH,HEIGHT);
}} }}

//ако няма грешки ще се изведе съобщение "Малкото копие е успешно създаден!"
// и ще се създаде малкото копие
if(isset($_POST['Submit']) && !$errors)
{
echo "<h1>Малкото копие е успешно създадено!</h1>";
echo '<img src="'.$thumb_name.'">';
}

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>PHP Създаване на малко копие</title>
</head>

<body>

<form name="newad" method="post" enctype="multipart/form-data" action="">
<table>
<tr><td><input type="file" name="image" ></td></tr>
<tr><td><input name="Submit" type="submit" value="Качи"></td></tr>
</table>
</form>

</body>
</html>

Скрипта е тестван и работи отлична. за съжаление в момента не мога да дам демо.