Upload: Thumbs med fast højde og relativ bredde
Nedestående er et fungerende upload-script, der tjekker for fil-type, størrelse etc., genererer thumbnails, lægger filerne i de respektive dirs osv.Men som det er nu beregnes størrelsen på thumbs udfra en procent-sats.
Hvordan ændre jeg det til, at thumbs får en fast højde på 100 pixel og en bredde relativ til denne højde? Altså fx. hvis originalen er 400 h * 800 b bliver thumb 100 * 200?
/* -- -- -- -- Tilføj billede -- -- -- -- */
IF(isset($_POST['ins_pict'])) {
function make_thumbnail($filename, $thumbs_dir, $percent = 0.5){
// her der får du fat i højde og bredde af billedet og skalerer disse værdier:
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
// imagecreatetruecolor() laver et nyt resource-object i
// PHP, en speciel PHP datatype som bruges når man bruger
// GD lib. $thumb er altså en resource som indeholder
// en ren data-struktur til et nyt billede - det nye thumbnail
// billede. Imagecreatefromjpeg() indlæser dit billede
// som var det JPEG. Her forventes et JPEG billed. Der
// findes funktioner til indlæsning af andre billede
// formater. $source er et resource-object som
// nu indeholder det uploadede billed:
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
// Magien ligger i at bruge imagecreateresized().
// Den modtager de to resource-objekter,
// pixel koordinater i destination og kilde-billedet (her begge 0,0)
// og de nye og gamle billede størelser.
// Det den gør er simpelthen at lave en ny skaleret kopi
// af det som ligger i $source og gemme det i $thumb.
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// Her gemmes thumbnail billedet:
imagejpeg($thumb, $thumbs_dir.'thumb_'.basename($filename));
}
$pComment=$_POST['pComment'];
$sId=$_POST['sId'];
$cId=$_POST['cId'];
$allowedTypes = array("image/jpeg", "image/pjpeg", "image/jpg"); //tilladte filtyper
$maxFileSize = 40960; //tilladt max-størrelse i bytes
$maxImgWidth = 400; //tilladt max-bredde i pixels
// $path = "/customers/xx/yy/httpd.www/grafik/bands/";//*nix-path til filens endelige placering
$temppath = "C:\\xampp\\htdocs\\tempup\\";//win-temppath
$path1 = "C:\\xampp\\htdocs\\nikolai\\grafik\\fotos\\";//win-path1
$pathThumb = "C:\\xampp\\htdocs\\nikolai\\grafik\\fotos\\fotosthumbs\\";//win-path2
IF($_FILES['img']['size']> 0) {
/* -- -- hvis img-input-feltet er ok -- -- */
//Er fil-typen blandt tilladte?
IF (in_array($_FILES['img']['type'],$allowedTypes)) {
//Er filen-størrelsen under max. tilladt?
IF ($_FILES['img']['size'] <= $maxFileSize) {
//Hvad er bredden på billedet?
$size = getImageSize($_FILES['img']['tmp_name']);
list($foo, $width, $bar, $height) = explode("\"",$size[3]);
//Er billede-bredden under max.?
IF ($width <= $maxImgWidth) {
//Læseligt tidsstempel - tilføjes senere filnavn
$timeStamp = date("His_dmy", time());
//Overføre billede til specificeret dir - win-funktion
chdir($path);//win-funktion
$img = stripslashes ($img);//win-funktion
//omdøb fil med tidsstempel
$name = strtolower($_FILES['img']['name']);
$ext = pathinfo($name);
$filtype = $ext['extension']; // FILTYPEN
$newname = $timeStamp .".". $filtype;
//Flytte fil til endelig placering
move_uploaded_file($_FILES['img']['tmp_name'], $path1.$newname) or die("Desværre er der sket en fejl!");
// THUMBNAIL BLIVER LAVET HER:
make_thumbnail($curDir . $path1 . $newname,$curDir . $pathThumb,0.5);
//Kobler til og opdatere db
MYSQL_CONNECT($host,$user,$password) OR DIE($c_error);
MYSQL_SELECT_DB($database) OR DIE($s_error);
$query = MYSQL_QUERY("INSERT INTO picture (pUrl, pComment, sId, cId)".
"VALUES ('$newname','$pComment','$sId','$cId') ");
$mess = "Foto sat ind!";
}
ELSE {
//Fejlmedl. hvis bild. breddere end tilladt
$mess = "Foto <I>ikke</I> sat ind: Det er bredere end tilladt!";
}
}
ELSE {
//Fejlmedl. hvis fil over max. tilladt
$mess = "Foto <I>ikke</I> sat ind: Filen er for stor!";
}
}
ELSE {
//Fejlmedl. hvis fil-format ikke tilladt
$mess = "Foto <I>ikke</I> sat ind: Forkert fil-format!";
}
}
ELSE {
//Fejlmedl. hvis input-felt tomt
$mess = "Foto <I>ikke</I> sat ind: Ingen fil specificeret!";
}
Header("Location:serie.php?serie=$sId&cId=$cId&mess=$mess");
}
Btw. er noget af det herfra: http://www.eksperten.dk/spm/745567 :-)
På forhånd tak