Hermed mit nuværende script. Det kan uploade et billede og derefter oprette en thumbnail. Det virker også fint.
jeg ønsker lidt mere :
*En MAX størrelse på billede filen. *Hvis ikke der uploades et billede, skal der insættes et dummy billede *Muligheden for at indsætte andre formater feks gif,png.
// THUMBNAIL BLIVER LAVET HER: $thumbnailDir = '/thumbnails/'; make_thumbnail( $curDir . $uploadDir . $file, $curDir . $thumbnailDir, 0.5 );
} } }
function make_thumbnail($filename, $thumbs_dir, $percent = 0.5) { // her der får du fat i højde og bredde af billedet og skalerer disse værdier: list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent;
// imagecreatetruecolor() laver et nyt resource-object i // PHP, en speciel PHP datatype som bruges når man bruger // GD lib. $thumb er altså en resource som indeholder // en ren data-struktur til et nyt billede - det nye thumbnail // billede. Imagecreatefromjpeg() indlæser dit billede // som var det JPEG. Her forventes et JPEG billed. Der // findes funktioner til indlæsning af andre billede // formater. $source er et resource-object som // nu indeholder det uploadede billed: $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename);
// Magien ligger i at bruge imagecreateresized(). // Den modtager de to resource-objekter, // pixel koordinater i destination og kilde-billedet (her begge 0,0) // og de nye og gamle billede størelser. // Det den gør er simpelthen at lave en ny skaleret kopi // af det som ligger i $source og gemme det i $thumb. imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// Her gemmes thumbnail billedet: imagejpeg($thumb, $thumbs_dir.'thumb_'.basename($filename)); }
Dummy billedet ville jeg vælge at håndtere i forbindelse med visning af billedet. Forstået på den måde at hvis der ikke allerede er uploadet et billede ville jeg vise et prædefineret billede i en if-struktur. Omkring udvidelse til flere filtyper, er ville jeg ville være at bruge et array af strings indeholdende MIME typerne på de godkendte filtyper det gør dig i stand til at tjekke om mime typen er godkendt ved brug af in_array funktionen. Du kunne vælge at definere dit array på følgende måde:
$types = array("image/jpeg","image/gif");
Omkring billedestørrelsen, her kan du meget simpelt tjekke højde og bredde via getimagesize funktionen, om du kan tjekke størrelsen på den midlertidige placering inden du gemmer ved jeg faktisk ikke, men jeg kan ikke se der skulle være noget problem i det, ellers er det bare at opsætte en procedure der sletter billedet igen hvis det ikke overhoveder kravene, dog er det altid at foretrække at tjekke før du gemmer.
At tjekke på MIME alene er en særdeles risikabel idé. Den kan meget let fakes, og så er fanden løs, hvis filen hedder .php og har et 'ubehageligt' indhold *o)
Prøve at kikke på denne løsning, hvor der tjekkes på både MIME og extension. Det er langt sikrere. Desuden bruger den en 'hash tabel' i stedet for in_array, som er en meget dårligt performende funktion.
"*Hvis ikke der uploades et billede, skal der insættes et dummy billede" >> Håndteres ved visningen. Vis dummybilledet, hvis der ikke er uploaded et billede.
"*Muligheden for at indsætte andre formater feks gif,png." >> Prøv at kikke på denne løsning
De to sidste ønsker har vi allerede svaret på én gang. Læs, hvad vi skriver - eller fortæl, hvad du ikke forstår - eller forklar, hvorfor du ikke er tilfreds med løsningerne.
De ting du efterlyser er sådan set bare generelle logiske problemstillinger. Det er ikke så specifikt til GDLib eller oprettelse af thumbnail. Olebole opsummerer fint de svar der er givet. At han så mister tålmodigheden lidt til sidst skal du ikke tage dig af :)
Men prøv og sæt dig ned med et stykke A4 papir og tegn nogle bokse og nogle pile som forklarer det flow af valg der gøres i dit program. Dette kaldes (i min verden) et flowchart og kan tit gøre en tilsyneladende kompleks problemstilling meget nemmere.
Men du får nok ikke nogen til at programmere det for dig :)
Der har da vist ikke været nogen mistet tålmodighed i denne tråd, men jeg kan naturligvis ikke tale for alle. Jeg påpeger blot det hensigtsmæssige i at læse de svar, man får - og det bør spørger naturligvis i egen interesse tage sig af *o)
Beklager jeg ikke har svaret før nu. jeg har forgæves forsøgt at anvende din løsning vedr. andre formater, men det fejler, måske fordi jeg ikke er 100 meter mester i php :( ... men din korrekte løsning med størrelse er ok og sat i værk. Ligeledes løsningen ved mit dummy billede, så har du skåret det ud i pap for mig :) men jeg efterlyser så en løsning på mit eksiterende script, hvor det vil fejle hvis jeg ikke indsætter et billede, hvordan vil mit upload virke hvis ikke brugeren indsætter et billede, der er nemlig også en del andre felter i sammt script. Giver min forklaring mening ?
intel4004 -> god ide med at nedskrive sin proces, det giver en del stof til eftertanke.
Forklar, hvad det betyder, at 'det fejler'. Hvad sker der og hvad sker der ikke. Får du fejl - og hvis du gør, vil det være hensigtsmæssigt, om du fortæller, hvad de siger =)
// THUMBNAIL BLIVER LAVET HER: $thumbnailDir = '/thumbnails/'; make_thumbnail( $curDir . $uploadDir . $file, $curDir . $thumbnailDir, 0.5 );
}
else { echo 'Fejl !forkert forma'; // Ikke en tilladt fil } } else { // Ingen fil uploaded } } }
function make_thumbnail($filename, $thumbs_dir, $percent = 0.5) { // her der får du fat i højde og bredde af billedet og skalerer disse værdier: list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent;
// imagecreatetruecolor() laver et nyt resource-object i // PHP, en speciel PHP datatype som bruges når man bruger // GD lib. $thumb er altså en resource som indeholder // en ren data-struktur til et nyt billede - det nye thumbnail // billede. Imagecreatefromjpeg() indlæser dit billede // som var det JPEG. Her forventes et JPEG billed. Der // findes funktioner til indlæsning af andre billede // formater. $source er et resource-object som // nu indeholder det uploadede billed: $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename);
// Magien ligger i at bruge imagecreateresized(). // Den modtager de to resource-objekter, // pixel koordinater i destination og kilde-billedet (her begge 0,0) // og de nye og gamle billede størelser. // Det den gør er simpelthen at lave en ny skaleret kopi // af det som ligger i $source og gemme det i $thumb. imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// Her gemmes thumbnail billedet: imagejpeg($thumb, $thumbs_dir.'thumb_'.basename($filename)); }
Prøv lidt almindelig fejlfinding med echo. Gå dine if-sætninger igennem én for en. Efter hver if (BETINGELSE) { echo'er du et par variabler for at se, om betingelsen bliver opfyldt - og om variablerne indeholder det forventede.
Når du kommer til en betingelse, der ikke bliver opfyldt, prøver du lige før betingelsen at echo'e de variabler, der indgår i betingelsen. Husk også at echo'e i hver else.
Så finder du skikkert ret hurtigt årsagen til, at der ikke sker noget
Det er jo også ganske rigtigt, jeg mener ikke at denne If giver det forventet. For den flytter jo filen, men filen er hedder jo ikke userfile men file... korrrekt ?
Jeg har nu forsøgt at indsætte echoér i mit script, men det vil bare ikke virke, der kommer ikke nogen echoér og mit script virker ikke som tiltænkt.... Hvad er det jeg gør forkert ?.
Det skal lige siges at jeg har en funktion på en anden side hvor det er muligt at uploade et profil billede. Det virker fint. Men det er uden at der bliver lavet thumpnail.
Jeg har i mit nedestående script en Header til fund.php. Den bliver kørt før mit script bliver færdigt, hvis jeg vælger at esklude den så får en en del fejl. Men selve upload scriptet ser sådan her ud ->
function make_thumbnail($filename, $thumbs_dir, $percent = 0.5) { // her der får du fat i højde og bredde af billedet og skalerer disse værdier: list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent;
// imagecreatetruecolor() laver et nyt resource-object i // PHP, en speciel PHP datatype som bruges når man bruger // GD lib. $thumb er altså en resource som indeholder // en ren data-struktur til et nyt billede - det nye thumbnail // billede. Imagecreatefromjpeg() indlæser dit billede // som var det JPEG. Her forventes et JPEG billed. Der // findes funktioner til indlæsning af andre billede // formater. $source er et resource-object som // nu indeholder det uploadede billed: $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename);
// Magien ligger i at bruge imagecreateresized(). // Den modtager de to resource-objekter, // pixel koordinater i destination og kilde-billedet (her begge 0,0) // og de nye og gamle billede størelser. // Det den gør er simpelthen at lave en ny skaleret kopi // af det som ligger i $source og gemme det i $thumb. imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// Her gemmes thumbnail billedet: imagejpeg($thumb, $thumbs_dir.'thumb_'.basename($filename)); }
Warning: getimagesize(): Unable to access /hsphere/local/home/xxxxxxxxxx/ov/upload/8fa8911a602d172922e593cc625ccc5e.jpg in /hsphere/local/home/xxxxxxxxxx/ov/foundings_update.php on line 70 Warning: getimagesize(/hsphere/local/home/xxxxxxxxxx/ov/upload/8fa8911a602d172922e593cc625ccc5e.jpg): failed to open stream: No such file or directory in /hsphere/local/home/xxxxxxxxxx/ov/foundings_update.php on line 70 Warning: imagecreatetruecolor(): Invalid image dimensions in /hsphere/local/home/xxxxxxxxxx/ov/foundings_update.php on line 83 Warning: imagecreatefromjpeg(): Unable to access /hsphere/local/home/xxxxxxxxxx/ov/upload/8fa8911a602d172922e593cc625ccc5e.jpg in /hsphere/local/home/xxxxxxxxxx/ov/foundings_update.php on line 84 Warning: imagecreatefromjpeg(/hsphere/local/home/xxxxxxxxxx/ov/upload/8fa8911a602d172922e593cc625ccc5e.jpg): failed to open stream: No such file or directory in /hsphere/local/home/xxxxxxxxxx/ov/foundings_update.php on line 84 Warning: imagecopyresized(): supplied argument is not a valid Image resource in /hsphere/local/home/xxxxxxxxxx/ov/foundings_update.php on line 92 Warning: imagejpeg(): supplied argument is not a valid Image resource in /hsphere/local/home/xxxxxxxxxx/ov/foundings_update.php on line 95
Jeg giver op! Vi kan ikke finde fejlen sammen. Skal jeg finde den, er jeg nødt til at sidde med det selv, så jeg objektivt ved, det jeg foreslår, bliver prøvet - og at jeg kender resultatet
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.