PHP Galerie fotek Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Luky
Level 1.5
Level 1.5
Příspěvky: 122
Registrován: červen 14
Pohlaví: Muž
Stav:
Offline

PHP Galerie fotek

Příspěvekod Luky » 20 kvě 2015 17:15

Ahoj, vytvářím svůj web a jsem už ztracený. To co teď potřebuji vyřešit jous náhled k fotografiím a tím spojená smysluplná galerie. Nyní mám systém takový, že uživatel nahraje soubory, ty se uloží do složky a do databáze se vypíše cesta, vždy pro toho uživatele, který má obrázky vidět. Teď potřebuji vytvořit náhled, aby byly všechny soubory stejně velké. Protože někdo může nahrát soubor 1080x1920 a někdo 14x25 :) Zkrátka potřebuji vytovřit smysluplný náhled. Zde je kód pro galerii.

Kód: Vybrat vše

<?php
session_start();

if(!isset($_SESSION['uzivatel_id'])) {
   header('Location: prihlaseni.php');
   exit();
}
if (isset($_GET['odhlasit']))
{
   session_destroy();
   header('Location: prihlaseni.php');
   exit();
}
require('Db.php');
require('Galerie.php');

Db::connect('wm56.wedos.net', 'xxx', xxx', xxx');

$items = Db::queryAll('select * from soubory where user_id = ' . $_SESSION['uzivatel_id']);

?>

<html>
  <head>
    <link rel="stylesheet" href="menu.css" type="text/css">
    <link rel="stylesheet" href="font-awesome.min.css">
    <link rel="stylesheet" href="bootstrap.css">
    <link rel="icon" href="icon.ico">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta charset="UTF-8">
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script src="script.js"></script>
    <script src="bootstrap.js"></script>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
    <title>Galerie | FileUP.cz</title>
  </head>
  <style>
    body {
    background-color: white;
    background-image: url(./soubory/background.png);
    background-repeat: no-repeat;
    background-attachment: fixed;
    background-position: center;
    background-size: 100% 100%;
    a:link    {color: orange;}
    a:visited    {color: orange};
    a:active    {color: orange};}

    #text{  /* Plovoucí okno*/
    border-radius: 5px;
    margin-top: 10%;
    margin-right: 5%;
    margin-left: 5%;
    padding: 10px 30px 10px 30px;
    background-color: rgb(255,255,255);
    border: medium solid black;
    text-align: justify }
 
    #galerie{
    width: 33%;
    padding: 20px;
    vertical-align: top;
    }
   
   
  </style>
  <body>
    <div id='cssmenu'>
    <ul>
      <li><a href='index.php'><span>Nahrávání</span></a></li>
      <li class='active'><a href='#'><span>O nás</span></a></li>
      <li><a href='faq.php'><span>F.A.Q</span></a></li>
      <li><a href='obrazky.php'><span>Galerie</span></a></li>
      <li class='last'><a href='kontakt.php'><span>Kontakt</span></a></li>
    </ul>
    </div>
    <div id="text">
     <h2 align="right">Galerie snímků </h1>
     <p>Zde najdete pouze Vámi nahrané snímky.</p>

            <?
                $rows = array_chunk($items,3);
                
                echo '<table>';
               
               foreach($rows as $row) {
                   echo "<tr>";
                   foreach($row as $column) {
                       echo "<td><img src=".$column['img_link']."></td>";
                   }
                   echo "</tr>";
               }
               
               echo "</table>";
             ?>
  </body>
</html>


Tag <style> je zde, protože je tato stránka trošku jinačí, než celý web.

Reklama
Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 320
Registrován: říjen 12
Bydliště: Kostelec u Holešova
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: PHP Galerie fotek

Příspěvekod lamin_cz » 20 kvě 2015 18:30

A chceš to řešit CSS nebo vytvořením miniatury již při nahrávání souboru?
  • CPU: Cx6x86L-PR150+
  • MB: XT PRO2
  • GPU: integrovaná
  • RAM: 28Mb SDRAM
PHP, MySQL, HTML, CSS, jQuery ...

Luky
Level 1.5
Level 1.5
Příspěvky: 122
Registrován: červen 14
Pohlaví: Muž
Stav:
Offline

Re: PHP Galerie fotek

Příspěvekod Luky » 20 kvě 2015 19:32

Pomocí CSS toho asi moc nesvedu, nechám to na Vás, nějak vůbec nevím jak na to.

Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 320
Registrován: říjen 12
Bydliště: Kostelec u Holešova
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: PHP Galerie fotek

Příspěvekod lamin_cz » 20 kvě 2015 20:12

Spíš bych to řešil tvorbou miniatur ... protože se nebude muset zobrazovat fotka v plném rozlišení ...

Sepisovat něco se mi teď večer už moc nechce, tak jsem našel jeden takový ...

Kód: Vybrat vše

function thumbnail_box($img, $box_w, $box_h) {
    //create the image, of the required size
    $new = imagecreatetruecolor($box_w, $box_h);
    if($new === false) {
        //creation failed -- probably not enough memory
        return null;
    }


    //Fill the image with a light grey color
    //(this will be visible in the padding around the image,
    //if the aspect ratios of the image and the thumbnail do not match)
    //Replace this with any color you want, or comment it out for black.
    //I used grey for testing =)
    $fill = imagecolorallocate($new, 200, 200, 205);
    imagefill($new, 0, 0, $fill);

    //compute resize ratio
    $hratio = $box_h / imagesy($img);
    $wratio = $box_w / imagesx($img);
    $ratio = min($hratio, $wratio);

    //if the source is smaller than the thumbnail size, 
    //don't resize -- add a margin instead
    //(that is, dont magnify images)
    if($ratio > 1.0)
        $ratio = 1.0;

    //compute sizes
    $sy = floor(imagesy($img) * $ratio);
    $sx = floor(imagesx($img) * $ratio);

    //compute margins
    //Using these margins centers the image in the thumbnail.
    //If you always want the image to the top left, 
    //set both of these to 0
    $m_y = floor(($box_h - $sy) / 2);
    $m_x = floor(($box_w - $sx) / 2);

    //Copy the image data, and resample
    //
    //If you want a fast and ugly thumbnail,
    //replace imagecopyresampled with imagecopyresized
    if(!imagecopyresampled($new, $img,
        $m_x, $m_y, //dest x, y (margins)
        0, 0, //src x, y (0,0 means top left)
        $sx, $sy,//dest w, h (resample to this size (computed above)
        imagesx($img), imagesy($img)) //src w, h (the full size of the original)
    ) {
        //copy failed
        imagedestroy($new);
        return null;
    }
    //copy successful
    return $new;
}

$i = imagecreatefromjpeg("img.jpg");
$thumb = thumbnail_box($i, 210, 150);
imagedestroy($i);

if(
is_null($thumb)) {
    /* image creation or copying failed */
    header('HTTP/1.1 500 Internal Server Error');
    exit();
}

imagejpeg($thumb, 'thumb/img.jpg');
 


Tato funkce Ti udělá miniaturu s rozměry 210x150px ... obrázek bude do něj vměstnán, kde se nevejde, bude šedé pozadí (lze změnit)

Zdroj: http://stackoverflow.com/questions/7471 ... fixed-size
  • CPU: Cx6x86L-PR150+
  • MB: XT PRO2
  • GPU: integrovaná
  • RAM: 28Mb SDRAM
PHP, MySQL, HTML, CSS, jQuery ...

Luky
Level 1.5
Level 1.5
Příspěvky: 122
Registrován: červen 14
Pohlaví: Muž
Stav:
Offline

Re: PHP Galerie fotek

Příspěvekod Luky » 20 kvě 2015 20:28

Jenže já potřebuju fotku i v originlní velikosti, ideálně, aby se po rozkliknutí zobrazila, mohl bys to prosím vnořit do mého kódu, byl bych ti vděčný, klidně až budeš mít čas, moc na to nespěchám.

Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 320
Registrován: říjen 12
Bydliště: Kostelec u Holešova
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: PHP Galerie fotek

Příspěvekod lamin_cz » 21 kvě 2015 13:13

Do Tvého kódu to vložit nemůžu ... je to potřeba vložit do kodu, který zajišťuje upload těch obrázků ...
  • CPU: Cx6x86L-PR150+
  • MB: XT PRO2
  • GPU: integrovaná
  • RAM: 28Mb SDRAM
PHP, MySQL, HTML, CSS, jQuery ...

Luky
Level 1.5
Level 1.5
Příspěvky: 122
Registrován: červen 14
Pohlaví: Muž
Stav:
Offline

Re: PHP Galerie fotek

Příspěvekod Luky » 21 kvě 2015 15:46

Upload obrázků mi zajišťuje tento kód.

Kód: Vybrat vše

<?php
session_start();

if (!isset($_SESSION['uzivatel_id']))
{
   header('Location: prihlaseni.php');
   exit();
}

if (isset($_GET['odhlasit']))
{
   session_destroy();
   header('Location: prihlaseni.php');
   exit();
}
// konfigurace
$uploadDir = './obrazky'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci)
$allowedExt = array('jpg', 'jpeg', 'png', 'gif'); // pole s povolenymi priponami
$results = array();


require('Db.php');
Db::connect('wm56.wedos.net', 'xxxg', 'axxxg', 'xxx');
 
// zpracovani uploadu
if(isset($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) {
 
    $counter = 0;
    $allowedExt = array_flip($allowedExt);
    foreach($_FILES['obrazky']['name'] as $klic => $nazev) {
 
        $fileName = basename($nazev);
        $tmpName = $_FILES['obrazky']['tmp_name'][$klic];
 
        // kontrola souboru
        if(
            !is_uploaded_file($tmpName)
            || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))])
        ) {
            // neplatny soubor nebo pripona
            continue;
        }

       $pap = $uploadDir.DIRECTORY_SEPARATOR.$_SESSION['uzivatel_jmeno'].time()."-".$fileName;

        // presun souboru
        if(move_uploaded_file($tmpName, $pap)) {
            ++$counter;
        }

     $results[] = "<p>Bylo nahráno ".$counter." z ".sizeof($_FILES['obrazky']['name'])." obrázků.<br /> Obrázek najdete:<a href='http://teenbook.cz/upload/obrazky/".$_SESSION['uzivatel_jmeno'].time()."-".$fileName."'> zde.</a></p><br> ";

       Db::insert('soubory',array('user_id' => $_SESSION['uzivatel_id'], 'img_link' => $pap));

    }
}
?>
<?php

$items = Db::queryAll('select * from soubory where user_id = ' . $_SESSION['uzivatel_id']);

?>
<html>
  <head>
    <link rel="stylesheet" href="main.css" type="text/css">
    <link rel="stylesheet" href="menu.css" type="text/css">
    <link rel="stylesheet" href="font-awesome.min.css">
    <link rel="stylesheet" href="bootstrap.css">
    <link rel="icon" href="icon.ico">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta charset="UTF-8">
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script src="script.js"></script>
    <script src="bootstrap.js"></script>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
    <title>FileUP.cz</title>
  </head>
  <body>
    <div id='cssmenu'>
      <ul>
         <li class='active'><a href='#'><span>Nahrávání</span></a></li>
         <li><a href='o_nas.php'><span>O nás</span></a></li>
         <li><a href='faq.php'><span>F.A.Q</span></a></li>
         <li><a href='obrazky.php'><span>Galerie</span></a></li>
         <li class='last'><a href='kontakt.php'><span>Kontakt</span></a></li>
      </ul>
    </div>
  <div id="text">                       
  <div class="row">
  <h2 align="right" class="section-title">Nahrávání</h2>
  <p>Vítejte zpět, jste přihlášeni jako <?= htmlspecialchars($_SESSION['uzivatel_jmeno']) ?></p>
           
               <div class="col-md-12 text-center">
                  <? foreach($results as $result) {
                  echo $result;
                } ?>

  <p><center><form method="post" id="form" enctype="multipart/form-data">
    <input type="file" class="btn btn-info btn-lg btn-block" name="obrazky[]" multiple="multiple" /> <br />
    <span id="submitContent"><input type="submit" class="btn btn-danger btn-lg btn-block" id="submitButton" value="Nahrát" /></span> </center></p>
      </div>
    </div>
  </div> <!--| TEXT | --->
  </form>
  </body>
</html>

<script>
   $('#submitButton').on('click',function() {
      $('#form').submit();
      $('#submitContent').html('<i class="fa fa-spinner fa-spin"></i> Nahrávání');
   });
</script>

Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 320
Registrován: říjen 12
Bydliště: Kostelec u Holešova
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: PHP Galerie fotek

Příspěvekod lamin_cz » 21 kvě 2015 17:59

Asi se Ti u toho moc nechce přemýšlet, co ...
Jinak ta funkce se uloží do souboru makeThumb.php ... a ve složce obrazky udělej další složku thumbs a dej ji práva na zápis ...
NEODZKOUŠENO, ale mělo by to takto fungovat ...

Kód: Vybrat vše

<?php
session_start
();

if (!isset($_SESSION['uzivatel_id']))
{
   header('Location: prihlaseni.php');
   exit();
}

if (isset($_GET['odhlasit']))
{
   session_destroy();
   header('Location: prihlaseni.php');
   exit();
}
// konfigurace
$uploadDir = './obrazky'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci)
$uploadDirThumb = './obrazky/thumbs';
$allowedExt = array('jpg', 'jpeg', 'png', 'gif'); // pole s povolenymi priponami
$results = array();


require(
'Db.php');
require_once 'makeThumb.php';
Db::connect('wm56.wedos.net', 'xxxg', 'axxxg', 'xxx');
 
// zpracovani uploadu
if(isset($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) {
 
    $counter 
= 0;
    $allowedExt = array_flip($allowedExt);
    foreach($_FILES['obrazky']['name'] as $klic => $nazev) {
 
        $fileName 
= basename($nazev);
        $tmpName = $_FILES['obrazky']['tmp_name'][$klic];
 
        
// kontrola souboru
        if(
            !is_uploaded_file($tmpName)
            || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))])
        ) {
            // neplatny soubor nebo pripona
            continue;
        }

       $pap = $uploadDir.DIRECTORY_SEPARATOR.$_SESSION['uzivatel_jmeno'].time()."-".$fileName;

        // presun souboru
        if(move_uploaded_file($tmpName, $pap)) {
            ++$counter;
            // vytvoreni miniatury
            $i = imagecreatefromjpeg( $pap );
            $thumb = thumbnail_box($i, 210, 150); // zde zadas rozmer vysledne miniatury
            imagedestroy($i);
            
            if
(is_null($thumb)) {
                /* image creation or copying failed */
                $results[] = 'Chyba při vytváření miniatury '.$fileName;
            }
            
            imagejpeg
($thumb, $uploadDirThumb.DIRECTORY_SEPARATOR.$_SESSION['uzivatel_jmeno'].time()."-".$fileName);

        }

     $results[] = "<p>Bylo nahráno ".$counter." z ".sizeof($_FILES['obrazky']['name'])." obrázků.<br /> Obrázek najdete:<a href='http://teenbook.cz/upload/obrazky/".$_SESSION['uzivatel_jmeno'].time()."-".$fileName."'> zde.</a></p><br> ";

       Db::insert('soubory',array('user_id' => $_SESSION['uzivatel_id'], 'img_link' => $pap));

    }
}
?>
<?php

$items 
= Db::queryAll('select * from soubory where user_id = ' . $_SESSION['uzivatel_id']);

?>
<html>
  <head>
    <link rel="stylesheet" href="main.css" type="text/css">
    <link rel="stylesheet" href="menu.css" type="text/css">
    <link rel="stylesheet" href="font-awesome.min.css">
    <link rel="stylesheet" href="bootstrap.css">
    <link rel="icon" href="icon.ico">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta charset="UTF-8">
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script src="script.js"></script>
    <script src="bootstrap.js"></script>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
    <title>FileUP.cz</title>
  </head>
  <body>
    <div id='cssmenu'>
      <ul>
         <li class='active'><a href='#'><span>Nahrávání</span></a></li>
         <li><a href='o_nas.php'><span>O nás</span></a></li>
         <li><a href='faq.php'><span>F.A.Q</span></a></li>
         <li><a href='obrazky.php'><span>Galerie</span></a></li>
         <li class='last'><a href='kontakt.php'><span>Kontakt</span></a></li>
      </ul>
    </div>
  <div id="text">                       
  <div class="row">
  <h2 align="right" class="section-title">Nahrávání</h2>
  <p>Vítejte zpět, jste přihlášeni jako <?= htmlspecialchars($_SESSION['uzivatel_jmeno']) ?></p>
            
               <div class="col-md-12 text-center">
                  <? foreach($results as $result) {
                  echo $result;
                } ?>

  <p><center><form method="post" id="form" enctype="multipart/form-data">
    <input type="file" class="btn btn-info btn-lg btn-block" name="obrazky[]" multiple="multiple" /> <br />
    <span id="submitContent"><input type="submit" class="btn btn-danger btn-lg btn-block" id="submitButton" value="Nahrát" /></span> </center></p>
      </div>
    </div>
  </div> <!--| TEXT | --->
  </form> 
  </body>
</html>

<script>
   $('#submitButton').on('click',function() {
      $('#form').submit();
      $('#submitContent').html('<i class="fa fa-spinner fa-spin"></i> Nahrávání');
   });
</script>
  • CPU: Cx6x86L-PR150+
  • MB: XT PRO2
  • GPU: integrovaná
  • RAM: 28Mb SDRAM
PHP, MySQL, HTML, CSS, jQuery ...

Luky
Level 1.5
Level 1.5
Příspěvky: 122
Registrován: červen 14
Pohlaví: Muž
Stav:
Offline

Re: PHP Galerie fotek  Vyřešeno

Příspěvekod Luky » 21 kvě 2015 20:15

Omluovám se, já myslel že použiješ jiný script, tohle jsem si mohl opravu udělat sám, omlouvám se ještě jednou, vyzkouším. Nevím proč jsem se nad tvojí předešlou odpovědí více nezamyslel, asi už mám plné zuby předešlého snažení. Děkuji ti, a jaký máš názor na kód, který jsem sem dal jako originální?

--- Doplnění předchozího příspěvku (21 Kvě 2015 20:23) ---

Tak tahle funkce (imagecreatefromjpeg() ) funguje pouze na jpeg, ale já nahrávám i png, gif.. Chyba na řádku 52
a Fatal error: Call to undefined function thumbnail_box()xxx/index.php .. na řádku 53

--- Doplnění předchozího příspěvku (21 Kvě 2015 22:39) ---

Už jsem si to opravil, děkuji za tvůj čas.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Mazání fotek na google fotky
    od Kincl6 » 05 srp 2024 19:45 » v Vše ostatní (sw)
    0
    4028
    od Kincl6 Zobrazit poslední příspěvek
    05 srp 2024 19:45
  • Obnova fotek z SD karty, která není vidět v souborovém systému
    od simio.simsoft » 01 lis 2024 20:00 » v Problémy s hardwarem
    8
    3159
    od Speed_dead Zobrazit poslední příspěvek
    05 lis 2024 10:02

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů