Kenneth Dammyr Skrevet 6. mai 2007 Del Skrevet 6. mai 2007 Hei igjen! I mitt lille CMS-sysem har jeg mulighet for bilder. For at disse skal være av lik størrelse har jeg funnet en funksjon på PHP.net som jeg har blitt riktig glad i. Den behandler bildene på en måte som gjør at selv små thumbnails viser riktig innhold. Rett og slett en god funksjon synes jeg. Men vil den funke i mitt system? Selvsagt ikke... Dog har den fungert av og til. Jeg har prøvd meg fram og tilbake og her om dagen trodde jeg den satt, før den plutselig ble uvenner igjen. Har nå byttet til et nytt filopplastings-script som fungerer bra. Klikk for å se/fjerne innholdet nedenfor if (($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") && ($_FILES["file"]["size"] < 200000000)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Opplasting vellykket!"; if (file_exists("artbilder/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " finnes fra før og ble ikke lastet opp. "; } else { $filnavn = $_FILES["file"]["name"]; $filendelse = explode(".", $filnavn); move_uploaded_file($_FILES["file"]["tmp_name"], "artbilder/" . $id . "." . $filendelse[1]); } } } else { echo "Filen er ikke godkjent."; } Og her er altså bildefunksjonen: Klikk for å se/fjerne innholdet nedenfor function makeIcons_MergeCenter($src, $dst, $dstx, $dsty){ //$src = original image location //$dst = destination image location //$dstx = user defined width of image //$dsty = user defined height of image $allowedExtensions = 'jpg jpeg gif png'; $name = explode(".", $src); $currentExtensions = $name[count($name)-1]; $extensions = explode(" ", $allowedExtensions); for($i=0; count($extensions)>$i; $i=$i+1){ if($extensions[$i]==$currentExtensions) { $extensionOK=1; $fileExtension=$extensions[$i]; break; } } if($extensionOK){ $size = getImageSize($src); $width = $size[0]; $height = $size[1]; if($width >= $dstx AND $height >= $dsty){ $proportion_X = $width / $dstx; $proportion_Y = $height / $dsty; if($proportion_X > $proportion_Y ){ $proportion = $proportion_Y; }else{ $proportion = $proportion_X; } $target['width'] = $dstx * $proportion; $target['height'] = $dsty * $proportion; $original['diagonal_center'] = round(sqrt(($width*$width)+($height*$height))/2); $target['diagonal_center'] = round(sqrt(($target['width']*$target['width'])+ ($target['height']*$target['height']))/2); $crop = round($original['diagonal_center'] - $target['diagonal_center']); if($proportion_X < $proportion_Y ){ $target['x'] = 0; $target['y'] = round((($height/2)*$crop)/$target['diagonal_center']); }else{ $target['x'] = round((($width/2)*$crop)/$target['diagonal_center']); $target['y'] = 0; } if($fileExtension == "jpg" OR $fileExtension=='jpeg'){ $from = ImageCreateFromJpeg($src); }elseif ($fileExtension == "gif"){ $from = ImageCreateFromGIF($src); }elseif ($fileExtension == 'png'){ $from = imageCreateFromPNG($src); } $new = ImageCreateTrueColor ($dstx,$dsty); imagecopyresampled ($new, $from, 0, 0, $target['x'], $target['y'], $dstx, $dsty, $target['width'], $target['height']); if($fileExtension == "jpg" OR $fileExtension == 'jpeg'){ imagejpeg($new, $dst, 70); }elseif ($fileExtension == "gif"){ imagegif($new, $dst); }elseif ($fileExtension == 'png'){ imagepng($new, $dst); } } } } Måten det blir kalt inn på ser slik ut: echo "<br>"; $src = "artbilder/" .$id . "." . $filendelse[1]; $dst1 = "artbilder/" .$id . "s." . $filendelse[1]; $dst2 = "artbilder/" .$id . "l." . $filendelse[1]; include "bilde.php"; // Her ligger funksjonen if (makeIcons_MergeCenter($src, $dst1, 500, 150)) {echo "Stort bilde fikset!<br />"; } else { echo "Stort bilde failed<br />";} if (makeIcons_MergeCenter($src, $dst2, 150, 80)) {echo "Lite bilde fikset!<br />"; } else { echo "Lite bilde failed<br />";} Klarer dere dette blir jeg overlykkelig. Det er min største hodepine for tiden... På forhånd takk! Lenke til kommentar
magicgunnar Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Sannsynligvis er dette litt for komplekst for meg, men det hadde hjulpet veldig om du sa hva som skjer når du kjører det? Hvilke feilmelinger får du når du har satt: ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); Hvordan ser outputen ut? Og har du puttet inn linjer av typen echo 'Kommer til punkt 1'; For å sjekke om skriptet faktisk kjører akkurat den løypa du vil det skal kjøres? Lenke til kommentar
Kenneth Dammyr Skrevet 7. mai 2007 Forfatter Del Skrevet 7. mai 2007 Jeg satt på disse to errpr-reporting linjene nå og fikk forsåvidt noen feilmeldinger, men det så ut til å være bagteller som i hvert fall ikke hadde noe med bildefunksjonen å gjøre. Og ja, jeg har en del sånn echo-outputs som sjekker at stringene ser ut som de skal etc. I tillegg til det dere ser i scriptet "if(funksjon){echo..." Så den kjører løypa den skal ja. Det er jeg ganske sikker på. Dere kan jo for så vidt se selv: Login til Ventus Brukernavn: testbruker Passord: testbruker Lenke til kommentar
magicgunnar Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Vet ikke om jeg helt har skjønt hva som går galt. Er problemet at du bare får opp noen av tumbnailene? Ser på kildekoden til siden at endel av tumbnailene bare heter slikt som 4678. og 5678. altså ikke noe jpg på slutten, kan dette ha noe å si? Lenke til kommentar
Kagee Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 Jeg fikk Takk for din artikkel! Opplasting vellykket! artbilder/251.jpg artbilder/251s.jpg artbilder/251l.jpg Stort bilde failed Lite bilde failed artbilder/251.jpg da jeg lastet opp (et stort nok) bilde. Men det så ut som om det store bildet funket - det strakk seg over hele toppen på preview-sida. Lenke til kommentar
Kenneth Dammyr Skrevet 7. mai 2007 Forfatter Del Skrevet 7. mai 2007 Ja du klarte det faktisk, og hvis du ser nå så finnes også den lille versjonen. 1. Kanskje det har noe med størrelsen på bildene som lastes opp? 2. Feilsjekken "stort/lite bilde failed" ser tydeligvis ikke ut til å funke... Magicgunnar: Problemet er egentlig litt usikkert. Det funker ikke ordentlig, det er er i hvert fall sikkert. Lenke til kommentar
kikkazz Skrevet 8. mai 2007 Del Skrevet 8. mai 2007 (endret) Her har du et lite script jeg har laget for å lage thumbs av bilder. PHP function resize_image($sti,$filnavn,$prefix,$maxbredde,$maxhoyde) { $fil = $sti ."/". $filnavn; $filtype = strtolower(strstr($fil, '.')); switch($filtype) { case '.jpeg':$source = imagecreatefromjpeg($fil);break; case '.jpg':$source = imagecreatefromjpeg($fil);break; case '.png':$source = imagecreatefrompng($fil); break; case '.gif':$source = imagecreatefromgif($fil); break; default: echo("Error Invalid Image Type"); return; break; } $storrelse = getimagesize($fil); $bildebredde = $storrelse[0]; $bildehoyde = $storrelse[1]; if($nymaxbredde < $bildebredde && $maxhoyde < $bildehoyde){ $proposjon = min($maxbredde/$bildebredde, $maxhoyde/$bildehoyde); $nyhoyde = floor($bildehoyde * $proposjon); $nybredde = floor($bildebredde * $proposjon); $mini = imagecreatetruecolor($nybredde, $nyhoyde); imagecopyresized($mini, $source, 0, 0, 0, 0, $nybredde, $nyhoyde, $bildebredde, $bildehoyde); $im = $sti . "" . $prefix. $filnavn; imagejpeg($mini, $im, 90); imagedestroy($source); imagedestroy($mini); } else{ echo "Det skjedde en feil"; } } Endret 8. mai 2007 av kikkazz Lenke til kommentar
Kenneth Dammyr Skrevet 8. mai 2007 Forfatter Del Skrevet 8. mai 2007 (endret) Litt vemodig å måtte gå vekk fra det opprinnelig scriptet. Har nesten forelsket meg litt i det Men jeg prøvde å sette inn ditt og fikk denne feilen: "Error Invalid Image Type". Bildet var jo bare et vanlig sample-image fra "Mine dokumenter". EDIT: Men som dere kanskje ser har noen av dere fått det til med det opprinnelige scriptet en gang, så det er mulig. Er bare det at den ikke fungerer hele tida. Endret 8. mai 2007 av kennethdammyr Lenke til kommentar
kikkazz Skrevet 8. mai 2007 Del Skrevet 8. mai 2007 la til en linje i koden du hadde, linje 12. Tror det skal fungere nå PHP function makeIcons_MergeCenter($src, $dst, $dstx, $dsty){ //$src = original image location //$dst = destination image location //$dstx = user defined width of image //$dsty = user defined height of image $allowedExtensions = 'jpg jpeg gif png'; $name = explode(".", $src); $currentExtensions = strtolower($name[count($name)-1]); $extensions = explode(" ", $allowedExtensions); for($i=0; count($extensions)>$i; $i=$i+1){ if($extensions[$i]==$currentExtensions) { $extensionOK=1; $fileExtension=$extensions[$i]; break; } } if($extensionOK){ $size = getImageSize($src); $width = $size[0]; $height = $size[1]; if($width >= $dstx AND $height >= $dsty){ $proportion_X = $width / $dstx; $proportion_Y = $height / $dsty; if($proportion_X > $proportion_Y ){ $proportion = $proportion_Y; }else{ $proportion = $proportion_X; } $target['width'] = $dstx * $proportion; $target['height'] = $dsty * $proportion; $original['diagonal_center'] = round(sqrt(($width*$width)+($height*$height))/2); $target['diagonal_center'] = round(sqrt(($target['width']*$target['width'])+ ($target['height']*$target['height']))/2); $crop = round($original['diagonal_center'] - $target['diagonal_center']); if($proportion_X < $proportion_Y ){ $target['x'] = 0; $target['y'] = round((($height/2)*$crop)/$target['diagonal_center']); }else{ $target['x'] = round((($width/2)*$crop)/$target['diagonal_center']); $target['y'] = 0; } if($fileExtension == "jpg" OR $fileExtension=='jpeg'){ $from = ImageCreateFromJpeg($src); }elseif ($fileExtension == "gif"){ $from = ImageCreateFromGIF($src); }elseif ($fileExtension == 'png'){ $from = imageCreateFromPNG($src); } $new = ImageCreateTrueColor ($dstx,$dsty); imagecopyresampled ($new, $from, 0, 0, $target['x'], $target['y'], $dstx, $dsty, $target['width'], $target['height']); if($fileExtension == "jpg" OR $fileExtension == 'jpeg'){ imagejpeg($new, $dst, 70); }elseif ($fileExtension == "gif"){ imagegif($new, $dst); }elseif ($fileExtension == 'png'){ imagepng($new, $dst); } } } } Lenke til kommentar
Kenneth Dammyr Skrevet 8. mai 2007 Forfatter Del Skrevet 8. mai 2007 Nå tror jeg det fungerer mer... Fikk i hvert fall laget flere artikler enn før med bilder. Kan virke som det har noe med størrelser og sånn og gjøre da. Lagde en artikkel hvor bilde jeg lastet opp var nøyaktig 500x150 (størrelsen på det store bildet) og det gikk ikke. Mer info: Laster jeg opp et bilde som er mindre enn 500px jeg vil ha, så lager den ikke noen stor versjon - kun thumbnail på 150px. Laster jeg opp et bilde som er større enn det jeg ønsker er den mer samarbeidsvillig. Størrelse har med andre ord noe å si. (Jeg har bedt den lage to versjoner: 500x150 og 150x80) Lenke til kommentar
kikkazz Skrevet 9. mai 2007 Del Skrevet 9. mai 2007 (endret) Har skrevet hele koden din på nytt og testet denne, så nå funker den Nå fungerer det slik: Du laster for eksempel opp et bilde som er: 450*352 Da blir resultatet slik: Stort bilde: 194*150. Lite bilde: 103*80 Det vil si at den endrer ikke størrelses forholdet i bildet. Som gjør at bildet ikke blir strekt ut eller krympet sammen. Kan endre på koden hvis du ønsker at det skal holde nøyaktig størrelsen på rammen? Du finner koden her: http://norskwebforum.no/pastebin/8532 Endret 9. mai 2007 av kikkazz Lenke til kommentar
Kenneth Dammyr Skrevet 9. mai 2007 Forfatter Del Skrevet 9. mai 2007 Kjempemessig! Men hadde vært fint om den endte opp i fast størrelse ja. Det er litt av poenget. Lenke til kommentar
kikkazz Skrevet 9. mai 2007 Del Skrevet 9. mai 2007 Altså bildet blir slik at det passer inn i rammen. Men det er bare den lengste siden som er akkurat passe Lenke til kommentar
Kenneth Dammyr Skrevet 9. mai 2007 Forfatter Del Skrevet 9. mai 2007 Hmm.. Var litt vrient å få implementert sammen med resten av siden, men jeg prøvde å bare lime det inn i en engen fil for å teste, og det fungerte forsåvidt. Men det behandler ikke bildene bra nok dessverre. Med innstillingene 500x150 / 150x80 så få jeg to ganske like bilder og begge har samme høyde/bredeforhold som originalbildet. Jeg vil ikke det. Jeg vil nemlig at den lager bilder som er brede. Selvsagt skal man kunne ha kvadratiske bilder også hvis man vil ha det, men et valg må det være. Det var her den gamle funksjonen var så fin. Den klippet nemlig bildene veldig bra. Så hvis du først fikk et bilde, så var det akkurat slik du ville. Vrient dette her gitt Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå