12. januar 2006 - 12:16
Der er
4 kommentarer og
1 løsning
PHP: Metode til resize af billde
Jeg har nogle billeder, som jeg vha. PHP ønsker at resize. Jeg kører med en fast width på 100px, og ønsker at lave et korrekt thumbnail hvor højden passer til denne bredde.
Hvilken beregningsmetode skal jeg bruge til at bestemme hvor meget jeg skal klippe ud.
Jeg har forsøgt mig med:
copy($_FILES['image']['tmp_name'],"$image_filename");
list($width, $height) = getimagesize($image_filename);
$max_size = 100;
$newwidth = $max_size;
$f = $width/$max_size;
$newheight = floor($height/$f);
$y = round($newheight*$f);
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($image_filename);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $y);
imagejpeg($thumb, "$image_filename_thumb");
Men det virker desværre ikke optimalt.
12. januar 2006 - 12:20
#1
du kan kigge lidt på denne funktion og se om det er noget du kan bruge
function image_resize($src,$dest,$maxWidth,$maxHeight,$quality=100) {
if (file_exists($src) && isset($dest)) {
// path info
$destInfo = pathInfo($dest);
// image src size
$srcSize = getImageSize($src);
// image dest size $destSize[0] = width, $destSize[1] = height
$srcRatio = $srcSize[0]/$srcSize[1]; // width/height ratio
$destRatio = $maxWidth/$maxHeight;
if ($destRatio > $srcRatio) {
$destSize[1] = $maxHeight;
$destSize[0] = $maxHeight*$srcRatio;
}
else {
$destSize[0] = $maxWidth;
$destSize[1] = $maxWidth/$srcRatio;
}
// path rectification
if ($destInfo['extension'] == "gif") {
$dest = substr_replace($dest, 'jpg', -3);
}
// true color image, with anti-aliasing
$destImage = imageCreateTrueColor($destSize[0],$destSize[1]);
imageAntiAlias($destImage,true);
// src image
switch ($srcSize[2]) {
case 1: //GIF
$srcImage = imageCreateFromGif($src);
break;
case 2: //JPEG
$srcImage = imageCreateFromJpeg($src);
break;
case 3: //PNG
$srcImage = imageCreateFromPng($src);
break;
default:
return false;
break;
}
// resampling
imageCopyResampled($destImage, $srcImage, 0, 0, 0, 0,$destSize[0],$destSize[1],$srcSize[0],$srcSize[1]);
// generating image
switch ($srcSize[2]) {
case 1:
case 2:
imageJpeg($destImage,$dest,$quality);
break;
case 3:
imagePng($destImage,$dest);
break;
}
return true;
}
else {
return false;
}
}
12. januar 2006 - 22:01
#3
hvis dit billede er 450 bredt og 700 højt, altså 450*700, og du vil have en fast bredde på 100.. så sig 700/(450/100)=155.xxxxxx
i den kode der står der bare 100/(450/700)=155.xxxxxx i stedet.. det er samme resultat..