27. januar 2009 - 14:50Der er
26 kommentarer og 1 løsning
Billede skal med gdlib ændres i størrelsen
Nedenstående er en del af et script som uploader et billede efter man har valgt det i en formular.
Hvordan kan man sætte noget ind i den så den ændre størrelsen på billedet til at blive 500 i bredden og så højden blot passer til (så det ikke strækkes) Det skal virke på jpg/jpeg, gif og png billeder
Den kan altså både resize proportionalt til fast bredde eller fast højde, eller den kan skære billedet til så det bliver width X height eller den kan gemme det i width x height uden at skære det, hvis du angiver en baggrundsfarve.
Jeg har prøvet jakobdo's fordi den anden ikke så ud til at tage højde for png og gif.
Jeg har sat funktionen ind, og har byttet copy($_FILES['files']['tmp_name'][$key], $add); ud med resize( $_FILES['files']['tmp_name'][$key], 500, 500, $add, $quality=90 ); De 2 500 er fordi den lavede en fejl med den manglede parametre.
Den laver ingen fejl når den kører men billedet er der ikke (men det er der når jeg bare bruger copy)
Har ikke lavet understående da jeg medsendte w og h $ow = imagesx( $srcim ); $oh = imagesy( $srcim ); $scale = 500 / $ow; $nw = round( $ow * $scale, 0 ); $nh = round( $oh * $scale, 0 ); $dstim = imagecreatetruecolor( $nw, $nh ); imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
Kan du hjælpe med hvad der måske er galt? ... kan du også sige om det vil virke med PHP4?
En lille sjov historie : Jeg har prøvet lign. problem for en kunde på små restriktive hoteller som Surftown og Cliché. Et billede uploaded fra bruger og fil gemt fra fx. resize gav ikke samme rettigheder, så løsningen fra faktisk at kopiere originalen ind hvor den nye udgave skal ligge, det bibeholder rettighederne, og så når du har skaleret det overskriver du med den færdige, og bibeholder rettighederne igen ;).
Men.. giver dig ikke mulighed for at lave file_exists(), men så kan du måske smide det i en temp-mappe og flytte ind i endelig mappe bagefter.
Du kan også have en tom fil med de rigtige rettigheder du kopierer ind og så overskriver til sidst med imagepng(), imagejpeg() eller lign.
Det er på en virtuel server (wampserver), med GDlib og åbne rettigheder. Så der burde ikke være problemer der.
Den laver samme fejl hvis man kun skriver 90
Jeg fandt en stor fejl. De stod forkert i rækkefølge. Så den er ændret til (add rykket før 500): resize( $_FILES['files']['tmp_name'][$key], $add, 500, 500, $quality=90 )
Den modtager rigtigt nu. Har udskrevet værdierne i starten af funktionen og den skriver: FILNAVN: C:\wamp\tmp\php7574.tmp NYTFILNAVN: ../billeder/test.jpg WIDTH: 500 HEIGHT: 500 QUALITY: 90
Extension har reelt intet med indeholdet af filerne at gøre, det skal du ikke bekymrer dig om, du kan altid omdøbe dem til hvad du vil :)
Men nogle systemer tillader dig ikke at tilgå filer i /tmp mapperne med andet end move_uploaded_file() .. så det første du altid gør er at flytte din modtaget fil ind i en temp-fil og arbejder videre derfra.
Jeg har dog lige et enkelt spørgsmål. Er det svært at ændre så den kun laver billeder om som er større end 500, således at mindre billeder ikke forstørres?
"Jeg fandt en stor fejl. De stod forkert i rækkefølge. Så den er ændret til (add rykket før 500): resize( $_FILES['files']['tmp_name'][$key], $add, 500, 500, $quality=90 )"
Hehe det har du da ret i, og det stod egenlig meet klart hehe :)
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.