Avatar billede peter_g_j Nybegynder
20. juni 2005 - 15:32 Der er 15 kommentarer og
1 løsning

ændre størrelsen på billede

Jeg sidder og er ved at lave noget med nogle billeder. Når folk uploader deres billede, vil jeg gerne have den til at ændre størrelsen på billedet. Jeg har fået det til at virke, sådan at når de uploader billedet, bliver billedet lagt ind i en mappe og der bliver lagt et link ind i min mysql-db. Men hvordan ændre jeg sådan at billedet kun bliver gemt i den ønskede opløsning? Jeg vil ikke lave en ny fil, da det udelukkende er for at spare plads på mit webhotel.

Håber nogen kan hjælpe, på forhånd tak.
/Peter
Avatar billede jokkejensen Novice
20. juni 2005 - 16:02 #1
Avatar billede kourinsu Nybegynder
20. juni 2005 - 16:05 #2
Jeg bruger følgende funktion, til at skabe thumbnails:

<?php
$pic = "";                // Originalt billede
$thumb = "";            // Ønsket thumbnail-navn

Thumb($pic, $thumb);                    // Kald funktion

function Thumb($sourcefile, $targetfile) {

    $source_id = imageCreateFromJPEG($sourcefile);
    $source_x = imagesx($source_id);
    $source_y = imagesy($source_id);
    $dest_x = 123; // ønsket x størrelse i pixels
    $dest_y = 92;  // ønsket y størrelse i pixels
    $target_id=imagecreatetruecolor($dest_x, $dest_y);
    imagecopyresampled($target_id,$source_id,0,0,0,0, $dest_x,$dest_y,        $source_x,$source_y);
    imagejpeg($target_id,$targetfile,100);
}
?>

Denne funktion skaber en kopi af det originale billede. Hvis du kun ønsker det nye billede, kan du jo lave en funktion, der sletter det originale billede...
Avatar billede peter_g_j Nybegynder
20. juni 2005 - 17:10 #3
kourinsu, det lyder som en fornuftig løsning. Jeg regner min højde på billedet ud først, så jeg har højden som en variabel, men det lader ikke til funktionen kan lide variabler.
<?
$imagesize = getimagesize($nyt_navn);
$width = 400;
$hight = $imagesize[1] / ($imagesize[0] / 400);
$hight = round($height);

function Thumb($sourcefile, $targetfile) {
    $source_id = imageCreateFromJPEG($sourcefile);
    $source_x = imagesx($source_id);
    $source_y = imagesy($source_id);
    $dest_x = 400; // ønsket x størrelse i pixels
    $dest_y = $height;  // ønsket y størrelse i pixels
    $target_id=imagecreatetruecolor($dest_x, $dest_y);
    imagecopyresampled($target_id,$source_id,0,0,0,0, dest_x,$dest_y,$source_x,$source_y);
    imagejpeg($target_id,$targetfile,100);
    }
?>

Skriver jeg echo $height, giver den mig et tal, fx 288, men skriver jeg bare 288, så virker det fint.

Har du et bud på hvad der er galt der?
Avatar billede kourinsu Nybegynder
20. juni 2005 - 17:13 #4
Tror det er fordi du har skrevet $hight det ene sted og $height det andet :)
Avatar billede peter_g_j Nybegynder
20. juni 2005 - 17:20 #5
Desværre, nej, det var ikke den lille fejl. Den kommer med den her fejl:
Warning: imagecreatetruecolor(): Invalid image dimensions in /data/webhotel/hjoerring/ny/Billeder/gem_billede.php on line 46

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /data/webhotel/hjoerring/ny/Billeder/gem_billede.php on line 47

Warning: imagejpeg(): supplied argument is not a valid Image resource in /data/webhotel/hjoerring/ny/Billeder/gem_billede.php on line 48

46 $target_id=imagecreatetruecolor($dest_x, $dest_y);
47 imagecopyresampled($target_id,$source_id,0,0,0,0, dest_x,$dest_y,$source_x,$source_y);
48 imagejpeg($target_id,$targetfile,100);
Avatar billede kourinsu Nybegynder
20. juni 2005 - 17:27 #6
Hmmm....har aldrig set det før. Det kunne måske være fordi, den ikke kan finde det billede du prøver at arbejde med. Når du angiver $pic og $thumb, kan du prøve at skrive hele stien: /data/webhotel/hjoerring/ny/Billeder/billednavn.jpg

Ved ikke om det hjælper, men prøv det...
Avatar billede peter_g_j Nybegynder
20. juni 2005 - 18:31 #7
Det hjælper heller ikke. Men tror også nærmere det er noget med variablen den ikke kan li, den skriver jo "Invalid image dimensions". Jeg har også forsøgt at sætte $height = 288. Men det giver samme fejl.
Avatar billede jokkejensen Novice
20. juni 2005 - 18:52 #8
jeg havde lidt problemer med GDI+ (C#) ... fejlen opstod fordi jeg brugte ints... og nogle billeder's bredde vil jo blive komma tal... derfor typecast dem eller et eller andet php noget..
Avatar billede peter_g_j Nybegynder
20. juni 2005 - 19:10 #9
Jeg bruger funktionen round($height) som afrunder, så der ikke længere er decimaler.
Avatar billede kourinsu Nybegynder
21. juni 2005 - 14:35 #10
Jeg må sige, at jeg stadig tror, det er fordi den ikke kan finde det billede du angiver. Jeg bruger også funktionen i et andet script jeg har lavet, hvor jeg angiver størrelsen i variabler. Der virker den fint.
Avatar billede peter_g_j Nybegynder
23. juni 2005 - 14:30 #11
Nej, det var ikke det. Det er noget med variablen $height skal være global. Jeg fik forklaringen på en anden debat, se her: http://www.webcafe.dk/debat/php/40932.html

Nu mangler jeg bare at finde ud af hvordan jeg får slettet den store fil, som jeg har komprimeret.
Avatar billede kourinsu Nybegynder
23. juni 2005 - 22:54 #12
Du kan bruge unlink() funktionen

http://dk2.php.net/manual/en/function.unlink.php
Avatar billede peter_g_j Nybegynder
26. juni 2005 - 11:29 #13
Tak for det kourinsu, så fik jeg det til at virke som jeg gerne ville have det. :)
Avatar billede peter_g_j Nybegynder
31. marts 2007 - 12:27 #14
Et svar?
Avatar billede kourinsu Nybegynder
31. marts 2007 - 15:32 #15
Svar :)
Avatar billede kourinsu Nybegynder
31. marts 2007 - 15:33 #16
Hov, svar :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester