Stránka 1 z 1
PHP Galerie fotek
Napsal: 20 kvě 2015 17:15
od Luky
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.
Re: PHP Galerie fotek
Napsal: 20 kvě 2015 18:30
od lamin_cz
A chceš to řešit CSS nebo vytvořením miniatury již při nahrávání souboru?
Re: PHP Galerie fotek
Napsal: 20 kvě 2015 19:32
od Luky
Pomocí CSS toho asi moc nesvedu, nechám to na Vás, nějak vůbec nevím jak na to.
Re: PHP Galerie fotek
Napsal: 20 kvě 2015 20:12
od lamin_cz
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) {
$new = imagecreatetruecolor($box_w, $box_h);
if($new === false) {
return null;
}
$fill = imagecolorallocate($new, 200, 200, 205);
imagefill($new, 0, 0, $fill);
$hratio = $box_h / imagesy($img);
$wratio = $box_w / imagesx($img);
$ratio = min($hratio, $wratio);
if($ratio > 1.0)
$ratio = 1.0;
$sy = floor(imagesy($img) * $ratio);
$sx = floor(imagesx($img) * $ratio);
$m_y = floor(($box_h - $sy) / 2);
$m_x = floor(($box_w - $sx) / 2);
if(!imagecopyresampled($new, $img,
$m_x, $m_y, 0, 0, $sx, $sy, imagesx($img), imagesy($img)) ) {
imagedestroy($new);
return null;
}
return $new;
}
$i = imagecreatefromjpeg("img.jpg");
$thumb = thumbnail_box($i, 210, 150);
imagedestroy($i);
if(is_null($thumb)) {
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
Re: PHP Galerie fotek
Napsal: 20 kvě 2015 20:28
od Luky
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.
Re: PHP Galerie fotek
Napsal: 21 kvě 2015 13:13
od lamin_cz
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ů ...
Re: PHP Galerie fotek
Napsal: 21 kvě 2015 15:46
od Luky
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>
Re: PHP Galerie fotek
Napsal: 21 kvě 2015 17:59
od lamin_cz
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();
}
$uploadDir = './obrazky'; $uploadDirThumb = './obrazky/thumbs';
$allowedExt = array('jpg', 'jpeg', 'png', 'gif'); $results = array();
require('Db.php');
require_once 'makeThumb.php';
Db::connect('wm56.wedos.net', 'xxxg', 'axxxg', 'xxx');
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];
if(
!is_uploaded_file($tmpName)
|| !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))])
) {
continue;
}
$pap = $uploadDir.DIRECTORY_SEPARATOR.$_SESSION['uzivatel_jmeno'].time()."-".$fileName;
if(move_uploaded_file($tmpName, $pap)) {
++$counter;
$i = imagecreatefromjpeg( $pap );
$thumb = thumbnail_box($i, 210, 150); imagedestroy($i);
if(is_null($thumb)) {
$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>
Re: PHP Galerie fotek Vyřešeno
Napsal: 21 kvě 2015 20:15
od Luky
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.