Hej
Jeg er næsten blevet gammel over et problem med GD jeg ikke kan få hul
på. Håber nogen kan løse det.
Sagen at at jeg har lavet et monster af en script og nu virker det
bare ikke #!
Hm... altså:
1. Jeg uploader et billede, resizer det og viser det i et vindue for
sig (modalt selvfølgelig) - det går fint og jeg bruger dette script:
--------------------
function resampimagejpg($forcedwidth, $forcedheight, $sourcefile,
$destfile, $imgcomp){
if(file_exists($sourcefile)){
$size=getimagesize($sourcefile);
if($size[0]>=$size[1]){
$destwidth=$forcedwidth;
$destheight=($forcedwidth/$size[0])*$size[1];
} else {
$destheight=$forcedheight;
$destwidth=($forcedheight/$size[1])*$size[0];
}
$img_src=@imagecreatefromjpeg($sourcefile) or die ("Image not
found!");
$img_dst=@imagecreatetruecolor($destwidth,$destheight) or die
("Can't create Image!");
imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $destwidth,
$destheight, $size[0], $size[1]);
imagejpeg($img_dst, $destfile, $imgcomp);
imagedestroy($img_dst);
return true;
}
else
return false;
}
--------------------
Jeg kalder funktionen med:
--------------------
$source = $tmp_name;
$dest = '../_t/org_'.$filename;
$temp = '../_t/temp.jpg';
move_uploaded_file( $source, $dest);
$size = getimagesize($dest);
resampimagejpg($makesize, $makesize, $dest, $temp, 100);
--------------------
Herefter går fint med at vise billedet resized og originalbilledet er
gemt på serveren (den bruger jeg senere). Med temp-billedet er det
mere tvivlsomt.
Herefter følger noget skummelt, hvor jeg i interfacen giver mulighed
for at markere et område på billedet, som skal croppes. Det virker og
jeg springer derfor over det.
Ved hjælp af javascript og et object gemmer jeg de parametre, jeg skal
bruge til cropningen.
Med
--------------------
cropimagejpg($oprindeligtBillede, $resultatBillede, $cleft, $ctop,
$cwidth, $cheight);
--------------------
kalder jeg:
--------------------
function cropimagejpg($oprindeligtBillede, $resultatBillede, $l, $t,
$w, $h){
$makesize = 500;
if($w>=$h){
$destwidth=$makesize;
$destheight=round(($makesize/$w)*$h);
} else {
$destheight=$makesize;
$destwidth=round(($makesize/$h)*$w);
}
$size=getimagesize($resultatBillede);
$sizeopr=getimagesize($oprindeligtBillede);
$newWidth = round($w*$sizeopr[0]/$size[0]);
$newHeight= round($h*$sizeopr[0]/$size[0]);
$srcleft = round($sizeopr[0]*$l/$size[0]);
$srctop = round($sizeopr[1]*$t/$size[1]);
$srcwidth = round($sizeopr[0]*$w/$size[0]);
$srcheight= round($sizeopr[1]*$h/$size[1]);
$img_src =@imagecreatefromjpeg($oprindeligtBillede) or die ("Image
not found!");
$img_dst1 =@imagecreatetruecolor($newWidth,$newHeight) or die
("Fejl 1");
$img_dst2 =@imagecreatetruecolor($destwidth,$destheight) or die
("Fejl 2");
imagecopyresampled($img_dst1, $img_src, 0, 0, $srcleft, $srctop,
$newWidth, $newHeight, $srcwidth, $srcheight);
imagejpeg($img_dst1, $oprindeligtBillede, 100);
imagedestroy($img_dst1);
imagecopyresampled($img_dst2, $img_src, 0, 0, $srcleft, $srctop,
$destwidth, $destheight, $srcwidth, $srcheight);
imagejpeg($img_dst2, '../_t/temp.jpg', 100);
imagejpeg($img_dst2, $resultatBillede, 100);
imagedestroy($img_dst2);
return true;
}
--------------------
Ja - og det virker så bare ikke!
Målet er at beskære originalbilledet ud fra parametrene fra
temp-billedet; gemme en ny udgave af originalbilledet i
$oprindeligtBillede og vise en temp-udgave af samme igen - resized.
imagejpeg() udskriver tilsyneladende hele tiden billedet ud i stedet
for at skrive til temp.jpg, som jeg så vil henvise til længere nede på
siden. I første runde gør den som jeg forventer ikke i andet. På
forhånd tak
Tobber
|