LTD
frecher fratz
|
Das heißt ich schreib eine eigene Seite, wo einfach 1x die Funktion drinnen ist. -> surfe ich die Seite an, macht der Server das ganze 1x.
ja?
|
LTD
frecher fratz
|
hab jetzt das hier genommen: <?PHP
$image_name = "foo.jpg";
$style = "show";
$image_name = "imagesdb/$style/$image_name";
if(!file_exists($image_name))
$image_name = "image.php?image_name=$image_name&style=$style";
?>
Now the main script, stored in the file image.php:
<?PHP
$image_name = $_GET['image_name'];
$style = $_GET['style'];
switch($style) {
case "show":
$max_size = 800;
break;
case "thumb":
$max_size = 125;
}
$dest_file = "imagesdb/$style/$image_name";
$image_file = "imagesdb/full/$image_name";
$size = getimagesize($image_file);
if($size[0] > $size[1]) {
$divisor = $size[0] / $max_size;
}
else {
$divisor = $size[1] / $max_size;
}
$new_width = $size[0] / $divisor;
$new_height = $size[1] / $divisor;
settype($new_width, 'integer');
settype($new_height, 'integer');
$image_big = imagecreatefromjpeg($image_file);
$image_small = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($image_small, $image_big, 0,0, 0,0, $new_width,$new_height, $size[0],$size[1]);
imagedestroy($image_big);
header("Content-type: image/jpeg");
if($style=="show" || $style=="thumb") {
if(!file_exists($dest_file))
imagejpeg($image_small, $dest_file, 100);
}
imagejpeg($image_small, '', 100);
imagedestroy($image_small);
?>
und bekomme das raus (folder + pic im folder hab ich erstellt) GD ist aktiviert
Bearbeitet von LTD am 26.09.2008, 23:04
|
LTD
frecher fratz
|
Eine Frage bezüglich for-schleifen -> wie kann ich einen kompletten Ordner einlesen, sodass er mir JEDES Bild darin überprüft und gegebenenfalls verkleinert und nicht nur ein einziges? Ich habe versucht ein Array zu machen, in das er mir die Filenames schreibt, die Stelle+Filename hätte ich zur Überprüfung genommen und genau danach durchlaufen lassen. Aber irgendwie speichert er mir kein Array über eine While/For-Schleife hinaus... Anbei das Script: <?PHP
$string="";
$fileCount=0;
$filePath=$PATH.'imagesdb/full/';
$dir = opendir($filePath);
while ($file = readdir($dir)) {
if (eregi(".jpg",$file) && !eregi("._",$file) ) {
$image_name = "$file";
}
}
$style = "thumb";
$file_compare = "imagesdb/$style/$image_name";
if(!file_exists($file_compare)){
switch($style) {
case "show":
$max_size = 800;
break;
case "thumb":
$max_size = 125;
}
$dest_file = "imagesdb/$style/$image_name";
$image_file = "imagesdb/full/$image_name";
$size = getimagesize($image_file);
if($size[0] > $size[1]) {
$divisor = $size[0] / $max_size;
}
else {
$divisor = $size[1] / $max_size;
}
$new_width = $size[0] / $divisor;
$new_height = $size[1] / $divisor;
settype($new_width, 'integer');
settype($new_height, 'integer');
$image_big = imagecreatefromjpeg($image_file);
$image_small = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($image_small, $image_big, 0,0, 0,0, $new_width,$new_height, $size[0],$size[1]);
imagedestroy($image_big);
header("Content-type: image/jpeg");
if($style=="show" || $style=="thumb") {
if(!file_exists($dest_file))
imagejpeg($image_small, $dest_file, 100);
}
imagejpeg($image_small, '', 100);
imagedestroy($image_small);
$fileCount++;
}
else {
echo "Nothing to convert!";
}
?>
Kann mir da wer helfen? Thx
Bearbeitet von LTD am 27.09.2008, 01:55
|
Smut
takeover&ether
|
wo verwendest du ein array?
|
Ezekiel
OC Addicted
|
$handle=opendir($dir);
while (($file=readdir($handle))!==false) {
if (!is_dir($file) && !file_exists("$dir/thumbs/sm_$file) {
liest alle files in $dir, und wenn es kein thumb gibt bzw. das file kein ordner ist dann ...
}
}
Bearbeitet von Ezekiel am 27.09.2008, 07:30
|
LTD
frecher fratz
|
wo verwendest du ein array? @smut Habe ich gekickt weil es ausserhalb der while-Schleife keine Werte mehr inne hatte. @ezekiel danke für das Script! Macht das nicht das gleiche was meines macht (nur etwas kürzer?!) ... Das Problem ist, er schmeisst mich beim Header raus. Sagt mir dass der Header nicht erneut erstellt werden konnte, erstellt ein einziges Bild und hört dann auf. Lösche ich dann den Part von Hader bis zum fileCount++ aus der Funktion, erstellt er mir keine Bilder mehr.
|
jives
And the science gets done
|
Das Problem ist, er schmeisst mich beim Header raus. Sagt mir dass der Header nicht erneut erstellt werden konnte, erstellt ein einziges Bild und hört dann auf. Lösche ich dann den Part von Hader bis zum fileCount++ aus der Funktion, erstellt er mir keine Bilder mehr. Es darf keinerlei Output in dem Script das das Bild generieren soll geben, sonst wird entweder das Bild defekt sein oder eben der von dir beschriebene Fehler auftreten. Das inkludiert auch Fehlermeldungen, Warnings und Notices die von PHP selbst kommen. D.h. ein Script kann immer nur _ein_ Bild generieren. Was du also tun musst ist: Ein zweites Script schreiben, dass eben dein Verzeichnis durchläuft und für jedes gefundene Bild dein Bild-Script aufruft. Dem kannst du wie gewohnt Parameter mittels GET übergeben, wie z.B. den Pfad zum Bild. P.S.: Übrigens, was passiert, wenn * im Verzeichnis ein File mit dem Namen image01.jpg.gif liegt? * im Verzeichnis ein Textfile mit dem Namen readme.jpg liegt?
Bearbeitet von jives am 27.09.2008, 13:03
|
kleinerChemiker
Here to stay
|
@smut Habe ich gekickt weil es ausserhalb der while-Schleife keine Werte mehr inne hatte. wenn das array inenrhalb while werte hat, dann hat es die auch außerhalb, außer du löscht/überschreibst sie.
|
LTD
frecher fratz
|
@jives - ich geh davon aus, dass ich nur jpgs benutze =).
Wie funktioniert das mit dem Script? Ich habe mal versucht das jetzige Script aufzurufen, aber wenn ich dann die Seite mit dem Aufruf-Script lade, tut sich garnix... muss ihc da irgend was spezielles reinschreiben?
die !_GET hat in der Seite mit dem Verkleinerungsscript nix bekommen von der anderen (also zb. filename, path, usw.)
|
jives
And the science gets done
|
Wie funktioniert das mit dem Script? Ich habe mal versucht das jetzige Script aufzurufen, aber wenn ich dann die Seite mit dem Aufruf-Script lade, tut sich garnix... muss ihc da irgend was spezielles reinschreiben?
die !_GET hat in der Seite mit dem Verkleinerungsscript nix bekommen von der anderen (also zb. filename, path, usw.) Kannst du deinen Code hier bitte nochmal posten? $_GET wird natürlich nicht von alleine befüllt - das musst schon du erledigen, indem du das Script nicht allein mit img.php sondern z.B. mit img.php?path=$file aufrufst.
|
LTD
frecher fratz
|
<?PHP
$image_name = "foo.jpg";
$style = "show";
$image_name = "imagesdb/$style/$image_name";
if(!file_exists($image_name))
$image_name = "image.php?image_name=$image_name&style=$style";
?>
Now the main script, stored in the file image.php:
<?PHP
$image_name = $_GET['image_name'];
$style = $_GET['style'];
switch($style) {
case "show":
$max_size = 800;
break;
case "thumb":
$max_size = 125;
}
$dest_file = "imagesdb/$style/$image_name";
$image_file = "imagesdb/full/$image_name";
$size = getimagesize($image_file);
if($size[0] > $size[1]) {
$divisor = $size[0] / $max_size;
}
else {
$divisor = $size[1] / $max_size;
}
$new_width = $size[0] / $divisor;
$new_height = $size[1] / $divisor;
settype($new_width, 'integer');
settype($new_height, 'integer');
$image_big = imagecreatefromjpeg($image_file);
$image_small = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($image_small, $image_big, 0,0, 0,0, $new_width,$new_height, $size[0],$size[1]);
imagedestroy($image_big);
header("Content-type: image/jpeg");
if($style=="show" || $style=="thumb") {
if(!file_exists($dest_file))
imagejpeg($image_small, $dest_file, 100);
}
imagejpeg($image_small, '', 100);
imagedestroy($image_small);
?>
Das wäre meine Ausgangsbasis, das unterhalb ist dann das Script ansich. Habe versucht den ersten Teil als "test.php" und den zweiten Teil unter "image.php" zu speichern. Dann habe ich in den Ordner Full ein Bild gelegt und "test.php" angesurft -> es tat sich leider gar nichts (also kein jpg im Ordner Show)...
|
kleinerChemiker
Here to stay
|
ist klar, daß sich nix tut.
du überprüfst ob ein file existiert und falls ja, dann weißt du einer variablen einen wert zu. und das wars auch schon, dann ist das skript zu ende.
|
LTD
frecher fratz
|
Dachte das wäre der Funktionsaufruf *g*
$image_name = "image.php?image_name=$image_name&style=$style";
Wie macht mans richtig?
|
jives
And the science gets done
|
Wenn ich das richtig verstehe willst du die Thumbs auch anzeigen, also müsse hier etwas in der Form echo "<img src=\"image.php?image_name=$image_name&style=$style\" />";
stehen.
Bearbeitet von jives am 27.09.2008, 21:24
|
LTD
frecher fratz
|
Wenn ich das richtig verstehe willst du die Thumbs auch anzeigen, also müsse hier etwas in der Form echo "<img src=\"image.php?image_name=$image_name&style=$style\" />";
stehen. Noch nicht nein =), mich würde es reichen wenn ich erstmal alle Bilder in einem Ordner konvertieren könnte. Ich habe also den ersten Teil der mir mit einer While-Schleife alle Bilder in einem Ordner durchgeht und den Part der pro Bild aufgerufen wird um es zu verkleinern. Ich möchte nun wissen wie ich den resize-Part aufrufen kann, du hast da irgendwas von einem Link geschrieben ...
|