Създаване на Thumbnail при upload
В този урок ще ви дам код за оразмеряване на картинка. Какво прави този код? Upload-ва директно оразмерената картинка без оригинала. Картинката не се деформира, а се пресмята новата ширина или височина в зависимост съответно от новата височина или ширина.
Трябва да създадете папка images и папка thumbs в нея, т.е. структората е такава images\thumbs. Папките трябва да са с права за писане.
Кодът не запазва анимацията на картинки в gif формат след upload-а освен ако техните размери не са по-малки от зададените. Ако размерите на картинката са по-малки от зададените тя директно се upload-ва без да се оразмерява.

<?php
echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Thumbnail Script</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<center>
';
if(isset($_POST['upload'])){//долният код се изпълнява, когато е натиснат бутонът Изпрати
function upload_small($tmp_name,$file_type,$path_small){//upload с промяна на ширина и височина на картинката
if(!file_exists($path_small)){//проверка дали съществува файл със същото име
if($file_type=="image/pjpeg" or $file_type=="image/jpeg" or $file_type=="image/gif" or $file_type=="image/x-png" or $file_type=="image/png"){//проверка дали файлът е картинка
list($width,$height)=getimagesize($tmp_name);
define("WIDTH","150");//ширина 150 пиксела - тук може да промените 150 за ширина
define("HEIGHT","150");//височина 150 пиксела - тук може да промените 150 за дължина
if($width<WIDTH and $height<HEIGHT){//ако ширината и височината са по-малки от WIDTH и HEIGHT
move_uploaded_file($tmp_name,$path_small);
}elseif($width>=WIDTH){//ако ширината е по-голяма или равна на WIDTH
$new_width= WIDTH;//задаване на нова ширина
$new_height= (int) ($height*$new_width)/$width;//задаване на нова височина
//избиране на функцията за разчитане на картинката
if($file_type=="image/pjpeg" or $file_type=="image/jpeg"){
$imagecreatefrom="imagecreatefromjpeg";
}elseif($file_type=="image/gif"){
$imagecreatefrom="imagecreatefromgif";
}elseif($file_type=="image/x-png" or $file_type=="image/png"){
$imagecreatefrom="imagecreatefrompng";
}
//край на избиране на функцията за разчитане на картинката
$image_p=imagecreatetruecolor($new_width, $new_height);//създаване на нова картинка с новите размери
$image=$imagecreatefrom($tmp_name);//разчитане на оригиналната картинка
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);//създаване на малката картинка
imagejpeg($image_p, $path_small, 100);//записване на малката картинка с качество 100
}elseif($height>=HEIGHT){//ако височината е по-голяма или равна на HEIGHT
$new_height= HEIGHT;//задаване на нова височина
$new_width= (int) ($width*$new_height)/$height;//задаване на нова ширина
//избиране на функцията за разчитане на картинката
if($file_type=="image/pjpeg" or $file_type=="image/jpeg"){
$imagecreatefrom="imagecreatefromjpeg";
}elseif($file_type=="image/gif"){
$imagecreatefrom="imagecreatefromgif";
}elseif($file_type=="image/x-png" or $file_type=="image/png"){
$imagecreatefrom="imagecreatefrompng";
}
//край на избиране на функцията за разчитане на картинката
$image_p=imagecreatetruecolor($new_width, $new_height);//създаване на нова картинка с новите размери
$image=$imagecreatefrom($tmp_name);//разчитане на оригиналната картинка
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);//създаване на малката картинка
imagejpeg($image_p, $path_small, 100);//записване на малката картинка с качество 100
}
}else{ echo 'Файлът не е картинка!'; exit; }
}else{ echo 'Такъв файл вече съществува!'; exit; }
}
define("URL","http://www.site.com/");//дефинираме адреса на сайта до първата папка images с / накрая
$file_name=$_FILES['ufile']['name'];//името на картинката
$tmp_name=$_FILES['ufile']['tmp_name'];//път до временното положение на картинката
$file_type=$_FILES['ufile']['type'];//тип на картинката
$path_small="images/thumbs/".basename(strtolower($file_name));//път за upload на малката картинка с малки букви
upload_small($tmp_name,$file_type,$path_small);//upload на малката картинка
//тук показваме картинката и адреса й и използваме дефинирания по-горе URL
echo '<br><img src="'.$path_small.'" alt=""><br>';
echo '<br>'.URL.$path_small.'<br>';
//край на показване картинката и адреса им
}else{
if(!function_exists("gd_info")){//проверка за GD библиотека
echo 'GD Graphics Library не е инсталирана на този сървър!';
}else{
echo '
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="ufile"><br>
<input type="submit" name="upload" value="Изпрати">
</form>
';
}
}
echo '
</center>
</body>
</html>
';
?>

Написал съм почти навсякъде обяснение за какво служи даденият ред.
В кода съм сложил за височина и ширина стойност 150px. За да я промените трябва да редактирате тези редове:
define("WIDTH","150"); - на мястото на 150 напишете стойността, която вие желаете за нова ширина.
define("HEIGHT","150"); - на мястото на 150 напишете стойността, която вие желаете за нова височина.
Сега ще ви покажа какво трябва да редактирате, за да се получават всички картинки с еднакви височини и ширини, т.е. да не се пресмята единия размер спрямо другия. В този случай обаче повечето от картинките ще се деформират.
Трябва да замените този ред $new_width= (int) ($width*$new_height)/$height; с $new_width=WIDTH; и този $new_height= (int) ($height*$new_width)/$width; с $new_height=HEIGHT;.
След upload-а се показва картинката и адресът към нея, ако искате да премахнете това трябва да изтриете тези редове:
echo '<br><img src="'.$path_small.'" alt=""><br>';
echo '<br>'.URL.$path_small.'<br>';


ДЕМО

Кодът лесно може да се преработи да се upload-ват повече от една картинка. И тъй като получих запитване как ще стане, допълвам този урок с вариант да се качват повече от една картинка едновременно.

<?php
echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Thumbnail Script</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<center>
';
if(isset($_POST['upload'])){//долният код се изпълнява, когато е натиснат бутонът Изпрати
function upload_small($tmp_name,$file_type,$path_small){//upload с промяна на ширина и височина на картинката
if(!file_exists($path_small)){//проверка дали съществува файл със същото име
if($file_type=="image/pjpeg" or $file_type=="image/jpeg" or $file_type=="image/gif" or $file_type=="image/x-png" or $file_type=="image/png"){//проверка дали файлът е картинка
list($width,$height)=getimagesize($tmp_name);
define("WIDTH","150");//ширина 150 пиксела - тук може да промените 150 за ширина
define("HEIGHT","150");//височина 150 пиксела - тук може да промените 150 за дължина
if($width<WIDTH and $height<HEIGHT){//ако ширината и височината са по-малки от WIDTH и HEIGHT
move_uploaded_file($tmp_name,$path_small);
}elseif($width>=WIDTH){//ако ширината е по-голяма или равна на WIDTH
$new_width= WIDTH;//задаване на нова ширина
$new_height= (int) ($height*$new_width)/$width;//задаване на нова височина
//избиране на функцията за разчитане на картинката
if($file_type=="image/pjpeg" or $file_type=="image/jpeg"){
$imagecreatefrom="imagecreatefromjpeg";
}elseif($file_type=="image/gif"){
$imagecreatefrom="imagecreatefromgif";
}elseif($file_type=="image/x-png" or $file_type=="image/png"){
$imagecreatefrom="imagecreatefrompng";
}
//край на избиране на функцията за разчитане на картинката
$image_p=imagecreatetruecolor($new_width, $new_height);//създаване на нова картинка с новите размери
$image=$imagecreatefrom($tmp_name);//разчитане на оригиналната картинка
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);//създаване на малката картинка
imagejpeg($image_p, $path_small, 100);//записване на малката картинка с качество 100
}elseif($height>=HEIGHT){//ако височината е по-голяма или равна на HEIGHT
$new_height= HEIGHT;//задаване на нова височина
$new_width= (int) ($width*$new_height)/$height;//задаване на нова ширина
//избиране на функцията за разчитане на картинката
if($file_type=="image/pjpeg" or $file_type=="image/jpeg"){
$imagecreatefrom="imagecreatefromjpeg";
}elseif($file_type=="image/gif"){
$imagecreatefrom="imagecreatefromgif";
}elseif($file_type=="image/x-png" or $file_type=="image/png"){
$imagecreatefrom="imagecreatefrompng";
}
//край на избиране на функцията за разчитане на картинката
$image_p=imagecreatetruecolor($new_width, $new_height);//създаване на нова картинка с новите размери
$image=$imagecreatefrom($tmp_name);//разчитане на оригиналната картинка
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);//създаване на малката картинка
imagejpeg($image_p, $path_small, 100);//записване на малката картинка с качество 100
}
}else{ echo 'Файлът не е картинка!'; exit; }
}else{ echo 'Такъв файл вече съществува!'; exit; }
}
define("URL","http://www.site.com/");//дефинираме адреса на сайта до първата папка images с / накрая
$file_name=$_FILES['ufile']['name'];//името на картинката
$tmp_name=$_FILES['ufile']['tmp_name'];//път до временното положение на картинката
$file_type=$_FILES['ufile']['type'];//тип на картинката
while(list($key,$value) = each($file_name))
{
if(!empty($value))
{
$value = $file_name;
$path_small="images/thumbs/".basename(strtolower($file_name[$key]));//път за upload на малката картинка с малки букви
upload_small($tmp_name[$key],$file_type[$key],$path_small);//upload на малката картинка
//тук показваме картинката и адреса й и използваме дефинирания по-горе URL
echo '<br><img src="'.$path_small.'" alt=""><br>';//може да го премахнете
echo '<br>'.URL.$path_small.'<br>';//може да го премахнете
//край на показване картинката и адреса им
}
}
}else{
if(!function_exists("gd_info")){//проверка за GD библиотека
echo 'GD Graphics Library не е инсталирана на този сървър!';
}else{
$max_images=4;//колко файла да се upload-ват
echo '
<form action="" method="post" enctype="multipart/form-data">';
for($i=1; $i<=$max_images; $i++){
echo '
<input type="file" name="ufile[]"><br>';
}
echo '
<input type="submit" name="upload" value="Изпрати">
</form>
';
}
}
echo '
</center>
</body>
</html>
';
?>


Този урок е написан специално за web-tourist.net. Забранявам копирането и публикуването му в друг сайт!




/ Трябва да сте регистриран за да напишете коментар /