Webmaster общности: Predpriemach.com | SearchEngines.bg

    Създаване на Thumbnail при upload

    Автор: Galli

    В този урок ще ви дам код за оразмеряване на картинка. Какво прави този код? 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. Забранявам копирането и публикуването му в друг сайт!

    Оставете коментар