[PHP] Thumbs vanuit directory creeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil graag van een map met allemaal foto's thumbnails creeren. Ik heb de volgende code:

code:
1
2
3
4
5
6
foreach($bestanden as $file)
{
  echo $file. "<br />";
  $name= explode(".",$file); 
  createImage("img/", $name[0], $name[1], 60, "_small");
}


$bestanden is de array met de bestanden uit directory. Hij maakt nu echter maar een thumbnail in plaats van het aantal in de map.

Iemand enig idee hoe ik dit voorelkaar krijg?

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Print hij wel alle filename's? (dus komt hij wel x aantal keer in de loop?)

petersmit.eu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
phsmit schreef op dinsdag 15 mei 2007 @ 14:30:
Print hij wel alle filename's? (dus komt hij wel x aantal keer in de loop?)
Die print hij allemaal netjes. de loop werkt verder dus goed, alleen de functie voert hij blijkbaar maar een keer uit.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Misschien zit er wel een fout of een fend/exit statement in de createImage functie

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dit is de functie:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function createImage($imgDir, $imageName, $extension, $width, $suffix)
{  
    //De hoogte en breedte ophalen van het plaatje
    $dimensions = getimagesize($imgDir . $imageName . "." . $extension); 
    
    //Hoogte en breedte toekennnen aan nieuwe variabelen
    $bronbreedte = $dimensions[0]; 
    $bronhoogte  = $dimensions[1];
    
    //Dit is de breedte die alle plaatjes krijgen
    if($width > 640)
    {
      $doelbreedte = 640;
    }
    else
    {
      $doelbreedte = $width;
    }
    
    //De nieuwe hoogte berekenen aan de gegevens van het oude plaatje en de doel breedte
    $doelhoogte = ($bronhoogte * $doelbreedte) / $bronbreedte;
    
    //De hoogte, als het nodig is, afronden
    $doelhoogte = round($doelhoogte, 0);
    
    //Zeggen dat dit bestand een plaatje is
    header('content-type: image/jpeg'); 
    
    //Het plaatje inlezen in de variabele $image
    $image = imagecreatefromjpeg($imgDir . $imageName . "." . $extension);
    
    //een nieuw klein plaatje maken met de gewenste grootte
    $destination = imagecreatetruecolor($doelbreedte, $doelhoogte);
    
    //Het nieuwe plaatje vullen met verkleinde plaatje
    imagecopyresampled($destination, $image, 0, 0, 0, 0, $doelbreedte, $doelhoogte, $bronbreedte, $bronhoogte);
    
    $new_filename = "$imgDir" . "$imageName" . "$suffix" . ".$extension";
    
    //Het plaatje opslaan en weergeven
    imagejpeg($destination, $new_filename);
    
    //Het bronplaatje verwijderen
    imagedestroy($image);
    
    //Het doelplaatje verwijderen
    imagedestroy($destination); 
}

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Noork schreef op dinsdag 15 mei 2007 @ 14:32:
Misschien zit er wel een fout of een fend/exit statement in de createImage functie
Nee, dan zou het hele script er mee stoppen. Maar kan de TS misschien de createImagefunctie laten zien. Daar zit waarschijnlijk wel een fout.
(ik denk dan zelf dat er misschien resources opnieuw gebruikt worden die niet opnieuw gebruikt kunnen worden)

petersmit.eu


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Je stuurt een header in je functie: waarom?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Wat doet die header aanroep in die functie? Geeft je script verder nog error meldingen?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Dat zal het probleem best eens kunnen zijn. Het script poept geen jpegje uit op het scherm, dus de header is niet nodig.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de header eruit gehaald, maar maakt geen verschil. Verder krijg ik geen foutmeldingen.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op dinsdag 15 mei 2007 @ 14:43:
Ik heb de header eruit gehaald, maar maakt geen verschil. Verder krijg ik geen foutmeldingen.
Je dient zelf bijvoorbeeld de returnwaarde van imagejpeg() te controleren.

Daarnaast controleer je nu nergens of de thumb al bestaat en maak je die thumbs steeds opnieuw. :X

{signature}


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Verwijderd schreef op dinsdag 15 mei 2007 @ 14:43:
Ik heb de header eruit gehaald, maar maakt geen verschil. Verder krijg ik geen foutmeldingen.
En je hebt error reporting wel op e_all gezet? Als je opzettelijk een ; mist moet je dat zien met een error reporting, dus test eens of dat aan staat :)

Doe anders ook gewoon wat extra debug werk in de trant van:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//De nieuwe hoogte berekenen aan de gegevens van het oude plaatje en de doel breedte 
    echo "Start berekening...";
    $doelhoogte = ($bronhoogte * $doelbreedte) / $bronbreedte; 
     
    //De hoogte, als het nodig is, afronden 
    $doelhoogte = round($doelhoogte, 0); 
    echo "Ok!<br>\n";
     
    //Zeggen dat dit bestand een plaatje is
    //Weggegooid dus
    //header('content-type: image/jpeg');  
     
    echo "Afbeelding inlezen...";
    //Het plaatje inlezen in de variabele $image 
    $image = imagecreatefromjpeg($imgDir . $imageName . "." . $extension); 
    echo "Ok!<br>\n";

    //etc


En check trouwens nog eens of je functies wel wat juist retourneren:
PHP:
1
2
3
4
5
6
if($image = imagecreatefromjpeg($imgDir . $imageName . "." . $extension)){
  echo "Gelukt";
}
if(imagejpeg($destination, $new_filename)){
  echo "Gelukt";
}
Dus :)

[ Voor 10% gewijzigd door mithras op 15-05-2007 14:49 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Werk het scriptje wel naar behoren wanneer je deze voor 1 afbeelding gebruikt (desnoods even de url van de afbeelding vast in de code zetten)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hej verdraaid hij doet het na nader in zien toch wel :D

Ik had eerst 1 bestand in de map (bestand1.jpg) na het uitvoeren van het script heb ik twee in de map:

bestand1.jpg
bestand1_small.jpg

Als ik nog een keer het script uitvoer verwachtte ik eigenlijk vier bestanden in de map maar dit is natuurlijk niet het geval omdat bestand1_small.jpg overschrijft wordt.

Was even een denkfoutje vanmezelf... :O

In ieder geval bedankt voor de feedback.

Acties:
  • 0 Henk 'm!

Verwijderd

En weet je zeker dat alle bestanden (plaatjes) maar 1 punt in de bestandsnaam hebben? Anders gaat die explode in je loop al fout. Ik zou daar dan ook dit van maken:
PHP:
1
2
$pos = strpos($file,'.'); 
createImage("img/",substr($file,0,$pos),substr($file,$pos+1,"_small");

Als je dit script twee keer aanroept op dezelfde directory gaat hij van die thumbnails ook weer thumbnails maken.
Pagina: 1