Avatar billede default Nybegynder
19. februar 2007 - 22:04 Der er 9 kommentarer og
1 løsning

Resize laver grafikken skide ringe?

Hejsa

Jeg arbejder på et resize script der skal gøre billeder mindre, det virker fint. Men grafikken bliver forværet en del, se feks dette billede
http://www.geekabit.dk/resize/billeder/80.62.215.2_380621.jpg

mit script
<?
//Her skal filen flyttes fra
$fra    = $_FILES['billede']['tmp_name'];

list($bredde, $hojde) = getimagesize($_FILES['billede']['tmp_name']); //Find højden og bredden på det billede jeg vil resize
$forhold = $hojde/$bredde; //Hvor stor er højden i forhold til bredden?

//Find den nye højde og bredde
$bredde_ny = 600;
$hojde_ny = round($bredde_ny*$forhold);

//Load/opret billeder
//Hvilken type fil arbejder vi med?
$ext2    = strtolower(end(explode(".", $_FILES['billede']['name'])));

//Hvis filen er et jpg, jpeg eller gif billede
if($ext2 == "jpeg" || $ext2 == "jpg")
{
$source = imagecreatefromjpeg($_FILES['billede']['tmp_name']);
}
if($ext2 == "gif")
{
$source = imagecreatefromgif($_FILES['billede']['tmp_name']);
}
$destination = imagecreate($bredde_ny, $hojde_ny);

//Resize
imagecopyresized($destination, $source, 0, 0, 0, 0, $bredde_ny, $hojde_ny, $bredde, $hojde);

//Gem
imagejpeg($destination, $_FILES['billede']['tmp_name']);

//Hvilken type fil arbejder vi med?
$ext    = strtolower(end(explode(".", $_FILES['billede']['name'])));

//Hvis filen er et jpg, jpeg eller gif billede
if($ext == "jpeg" || $ext == "jpg" || $ext == "gif")
{
$tid        = $_SERVER['REMOTE_ADDR'];

//Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
$nytNavn = $tid . "_" . rand(1, 1000000) . "." . $ext;
$til        = "billeder/" . $nytNavn;
move_uploaded_file($fra, $til);
}
echo "<img src=\"billeder/$nytNavn\">";
?>

Kan der overhovedes laves så der er bedere grafik?
Avatar billede jakobdo Ekspert
20. februar 2007 - 08:06 #1
Du skal overveje at bruge: imagecopyresampled() og ikke imagecopyresized()

Brug også imagecreatetruecolor() og ikke imagecreate()
Avatar billede default Nybegynder
20. februar 2007 - 17:41 #2
virker, men efter lidt tid får jeg Siden kan ikke vises, det er kun når billederne kun er store+ Nogle der kan smide ind i scritet, så den ikke har længere buffer tid?
Avatar billede jakobdo Ekspert
20. februar 2007 - 18:26 #3
Hvis du prøver at arbejde med et billede som er meget stort, f.eks. 3000x2000 så vil de fleste serveren ramme memory_limit og dit script vil stoppe.
Og er error reporting deaktiveret, så får du ingen fejl.
Så det du evt. bør gøre, er at kontroller størrelsen på filen og evt. kontrollere dimensionen på billedet inden du begynder at behandle på det.
Avatar billede default Nybegynder
21. februar 2007 - 00:12 #4
Noget du kan smide ind i det her script? Så advanceret er jeg heller ikke til php :P


<?
//Her skal filen flyttes fra
$fra    = $_FILES['billede']['tmp_name'];

list($bredde, $hojde) = getimagesize($_FILES['billede']['tmp_name']); //Find højden og bredden på det billede jeg vil resize
$forhold = $hojde/$bredde; //Hvor stor er højden i forhold til bredden?

//Find den nye højde og bredde
$bredde_ny = 600;
$hojde_ny = round($bredde_ny*$forhold);

//Load/opret billeder
//Hvilken type fil arbejder vi med?
$ext2    = strtolower(end(explode(".", $_FILES['billede']['name'])));

//Hvis filen er et jpg, jpeg eller gif billede
if($ext2 == "jpeg" || $ext2 == "jpg")
{
$source = imagecreatefromjpeg($_FILES['billede']['tmp_name']);
}
if($ext2 == "gif")
{
$source = imagecreatefromgif($_FILES['billede']['tmp_name']);
}
$destination = imagecreate($bredde_ny, $hojde_ny);

//Resize
imagecopyresized($destination, $source, 0, 0, 0, 0, $bredde_ny, $hojde_ny, $bredde, $hojde);

//Gem
imagejpeg($destination, $_FILES['billede']['tmp_name']);

//Hvilken type fil arbejder vi med?
$ext    = strtolower(end(explode(".", $_FILES['billede']['name'])));

//Hvis filen er et jpg, jpeg eller gif billede
if($ext == "jpeg" || $ext == "jpg" || $ext == "gif")
{
$tid        = $_SERVER['REMOTE_ADDR'];

//Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
$nytNavn = $tid . "_" . rand(1, 1000000) . "." . $ext;
$til        = "billeder/" . $nytNavn;
move_uploaded_file($fra, $til);
}
echo "<img src=\"billeder/$nytNavn\">";
?>
Avatar billede jakobdo Ekspert
21. februar 2007 - 07:47 #5
list($bredde, $hojde) = getimagesize($_FILES['billede']['tmp_name']); //Find højden og bredden på det billede jeg vil resize

$max_bredde = 1600;
$max_hojde  = 1200;

if($bredde > $max_bredde)
die("Billedet er for bredt");

if($hojde> $max_hojde)
die("Billedet er for højt");
Avatar billede default Nybegynder
21. februar 2007 - 20:11 #6
fejlen er jo at den står og loader i lidt tid, også kommer den til siden kan ikke vises.
Avatar billede jakobdo Ekspert
21. februar 2007 - 22:05 #7
Det kan være at selve upload af filen er for stor, så inden php begynder at behandle filen, så timer dit script ud.
Det tror jeg faktisk ikke du kan gøre noget ved.
Avatar billede default Nybegynder
27. februar 2007 - 17:21 #8
Andre der har noget???
Avatar billede default Nybegynder
05. september 2008 - 20:12 #9
lukker
Avatar billede jakobdo Ekspert
06. september 2008 - 08:31 #10
Lukker ?
Jeg løste da dit problem.
Kommentar: default
20/02-2007 17:41:27    virker

At siden timer ud, kan du jo ikke ændre, med mindre du har adgang til serveren og kan lave ændringer der.
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