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":

$imginfo = Getimagesize($file);
switch ($imginfo['2']) {
 case '1': $img = imagecreatefromgif($file);break;
 case '2': $img = imagecreatefromjpeg($file);break;
 case '3': $img = imagecreatefrompng($file);break;
 default: 
}
ü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):
<?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 (strpos($url, '://') !== false) {
	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;	
	
	if ( file_exists( $thumbnail_path) || (is_dir($dir) && file_exists("$dir/$file") && is_file("$dir/$file") && thumbnail("$dir/$file", $thumbnail_path) ) ) {
		$redirect = $thumbnail_path;
	}

	else {
		$redirect = $_GET['url'];
	}
	
	header("Location: $redirect");
	
}
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
$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:
$thumbnail_path = THUMBNAIL_DIR . '/tn_' . str_replace(array('/', '\\'), array('_slash_', '_backslash_'), $dir) . '_' . $tnfile;