ugrás a tartalomhoz

Megváltoztatott kép másikmappába mentése

livi34 · 2007. Jún. 7. (Cs), 17.33
SZijasztok a következő lenne a problémám van egy kép feltöltő form-om, nah most ez feltölti egy mappába a képeket, aztán van egy kis php kódom, ami átalakítja a méretét és ki echo za a gelériába nah most az a probléma vele h mivel két kép lesz így a nagy meg a kicsi és mivel a függvény az összes fájlt beolvassa és kiírja ezért így a kicsi és a nagy is a gelériába lesz, nah most erre azt találtam ki h a kicsi képeket külön teszem egy másik mappába és csak azokat iratom ki, meg is csináltam, pontosabban kaptam jó ötleteket deh mégsem működik, esetleg vki vmi ötlet itt lenne a forrás

galleri.php:
<html>
<head>
<title>Képeim</title>
</head>
<body style="margin:0" bgcolor="#000000">
<center>
<?
$mappa="./kepek/";
$megnyit=@opendir($mappa);
while($fajl=@readdir($megnyit)){
if($fajl!="." && $fajl!="..")
echo '<img src="thumbnail.php?url=./kepek/' . $fajl . '" alt="' . $fajl . '" /> ';
}

?>

</center>
</html>


thumbnail.php:
<?php
define('THUMBNAIL_DIR', 'kicsi'); // ez volt az ötlet

function thumbnail($osrc, $trg, $nwidth = 200, $nheight = 200, $qual = 60) {
switch (strtoupper(substr($osrc, -4, 4))) {
case '.JPG':
case 'JPEG':
$src = imagecreatefromjpeg($osrc);
break;
case '.GIF':
$src = imagecreatefromgif($osrc);
break;
case '.PNG':
$src = imagecreatefrompng($osrc);
break;
default: $src = 0; break;
}
if (0===$src) return false;
$d = getimagesize($osrc);
$w = $d[0];
$h = $d[1];
if ($w && $h && ($w>$nwidth || $h>$nheight)) {
if ($w>$h) {
$tw = $nwidth;
$th = floor($h*$tw/$w);
} else {
$th = $nheight;
$tw = floor($w*$th/$h);
}
$img = imagecreatetruecolor($tw, $th);
imagecopyresampled($img, $src, 0, 0, 0, 0, $tw, $th, $w, $h);
imagedestroy($src);
imagejpeg($img, $trg, $qual);
imagedestroy($img);
return true;
}
return false;
}
$url = $_GET['url'];
if (false!==strpos($url, '://')) {
header('Location: '.$_GET['url']);
} else {
$dir = dirname($url);
$file = basename($url);
$tnfile = $file.'.jpg';

$thumbnail_path = THUMBNAIL_DIR.'/tn_'.str_replace(array('/', '\'), array('_slash_', '_backslash_'), $dir).'_'.$tnfile;

header((file_exists($thumbnail_path) || (is_dir($dir) && file_exists($dir.'/'.$file) && is_file($dir.'/'.$file) && thumbnail($dir.'/'.$file, $thumbnail_path)))?('Location: '.$thumbnail_path):('Location: '.$_GET['url']));
}
?>
 
1

bonyolult

breakline · 2007. Jún. 7. (Cs), 23.06
sztem használj adatbázist, és ne listázz könyvárakat...


Plusz néhány 5let:

Egyrészt csináld meg akkor a thumbnail-t, amikor feltöltöd a file-t, és nevezd el egyértelműen, pl.
kep.jpg esetén legyen thumb_kep.jpg, nem kell külön mappa sem.


kép típus megállapítása inkább ezt, mert a kiterjesztés nem túl "elegáns":
  1. $imginfo = Getimagesize($file);  
  2. switch ($imginfo['2']) {  
  3.  case '1'$img = imagecreatefromgif($file);break;  
  4.  case '2'$img = imagecreatefromjpeg($file);break;  
  5.  case '3'$img = imagecreatefrompng($file);break;  
  6.  default:   
  7. }  
üdv
BL
2

válasz

livi34 · 2007. Jún. 7. (Cs), 23.30
hmm nekem így kéne azért mert így a legkönnyeb feltölteni vmit is és a leggyorsabb is mellette szóval erre kéne a megoldás...*-) deh a kiterjesztéses dolog teccik:)
3

Egy kis segítség

Marcell · 2007. Jún. 8. (P), 16.41
Ezt a mondatot:
SZijasztok a következő lenne a problémám van egy kép feltöltő form-om, nah most ez feltölti egy mappába a képeket, aztán van egy kis php kódom, ami átalakítja a méretét és ki echo za a gelériába nah most az a probléma vele h mivel két kép lesz így a nagy meg a kicsi és mivel a függvény az összes fájlt beolvassa és kiírja ezért így a kicsi és a nagy is a gelériába lesz, nah most erre azt találtam ki h a kicsi képeket külön teszem egy másik mappába és csak azokat iratom ki, meg is csináltam, pontosabban kaptam jó ötleteket deh mégsem működik, esetleg vki vmi ötlet itt lenne a forrás
így kell érthetően megfogalmazni - mondatokban, bekezdésekbe tagolva:
Sziasztok!
A következő lenne a problémám: van egy képfeltöltő úrlapom, ez tölti fel egy mappába a megadott képeket. Ezután egy PHP átméretezi, elmenti, majd megjeleníti egy galériában. Az a problémám vele, hogy mivel két kép lesz (egy nagy és egy kicsi), és a megjelenítő függvény az összes fájlt kiírja, ezért a kicsi és a nagy is a gelériában lesz.

Erre azt találtam ki, hogy a kicsi képeket egy másik mappába teszem és csak azokat iratom ki. Ezt meg is csináltam (pontosabban kaptam ötleteket hozzá), de mégsem működik.

Esetleg van valakinek ötlete, mit rontottam el? Íme a forrás:
És itt aztán használva a kódszínezőt megadod TÖRDELVE, BEHÚZVA a fájlok kódját (feltételezem, nem ilyen formában írtad).
4

a kód rendesen

Marcell · 2007. Jún. 8. (P), 17.03
Hogy ne csak a szám járjon, kipucoltam kicsit a kódodat (igazából csak átláthatóbb formára hoztam):
  1. <?php  
  2.   
  3. define('THUMBNAIL_DIR''kicsi'); // ez volt az ötlet  
  4.   
  5. function thumbnail($osrc$trg$nwidth = 200, $nheight = 200, $qual = 60) {  
  6.       
  7.     switch (strtoupper(substr($osrc, -4, 4))) {  
  8.   
  9.         case '.JPG':  
  10.         case 'JPEG':  
  11.             $src = imagecreatefromjpeg($osrc); break;  
  12.   
  13.         case '.GIF':  
  14.             $src = imagecreatefromgif($osrc); break;  
  15.   
  16.         case '.PNG':  
  17.             $src = imagecreatefrompng($osrc); break;  
  18.           
  19.         default$src = 0; break;  
  20.   
  21.     }  
  22.   
  23.     if (0 === $src) {  
  24.         return false;  
  25.     }  
  26.   
  27.     $d = getimagesize($osrc);  
  28.     $w = $d[0];  
  29.     $h = $d[1];  
  30.   
  31.     if ($w && $h && ($w > $nwidth || $h > $nheight)) {  
  32.   
  33.         if ($w>$h) {  
  34.             $tw = $nwidth;  
  35.             $th = floor($h*$tw / $w);  
  36.         }  
  37.   
  38.         else {  
  39.             $th = $nheight;  
  40.             $tw = floor($w*$th / $h);  
  41.         }  
  42.   
  43.         $img = imagecreatetruecolor($tw$th);  
  44.         imagecopyresampled($img$src, 0, 0, 0, 0, $tw$th$w$h);  
  45.   
  46.         imagedestroy($src);  
  47.   
  48.         imagejpeg($img$trg$qual);  
  49.         imagedestroy($img);  
  50.   
  51.         return true;  
  52.   
  53.     }  
  54.   
  55.     return false;  
  56.   
  57. }  
  58.   
  59. $url = $_GET['url'];  
  60.   
  61. if (strpos($url'://') !== false) {  
  62.     header("Location: $_GET[url]");  
  63. }  
  64.   
  65. else {  
  66.     $dir = dirname($url);  
  67.     $file = basename($url);  
  68.     $tnfile = "$file.jpg";  
  69.   
  70.     $thumbnail_path = THUMBNAIL_DIR . '/tn_' . str_replace(array('/''\'), array('_slash_', '_backslash_'), $dir) . '_' . $tnfile;   
  71.       
  72.     if ( file_exists$thumbnail_path) || (is_dir($dir) && file_exists("$dir/$file") && is_file("$dir/$file") && thumbnail("$dir/$file"$thumbnail_path) ) ) {  
  73.         $redirect = $thumbnail_path;  
  74.     }  
  75.   
  76.     else {  
  77.         $redirect = $_GET['url'];  
  78.     }  
  79.       
  80.     header("Location: $redirect");  
  81.       
  82. }  
5

egy hiba

Marcell · 2007. Jún. 8. (P), 17.07
...és akkor már látszik is, hogy van egy gubanc a kódban... A
  1. $thumbnail_path = THUMBNAIL_DIR . '/tn_' . str_replace(array('/''\'), array('_slash_', '_backslash_'), $dir) . '_' . $tnfile;   
sorban amikor a viszaperjelet adod meg, azt az értelmező escape karaternek veszi.. hogy ne vegye annak, kettőt kell írni belőle (hogy escapelja az escape karaktert :)), tehát cseréld ki erre a sorra:
  1. $thumbnail_path = THUMBNAIL_DIR . '/tn_' . str_replace(array('/''\\'), array('_slash_', '_backslash_'), $dir) . '_' . $tnfile;