我有一個PHP腳本,保存原始圖像,然後調整大小 - 一個縮略圖和一個較大的圖像,以供網頁瀏覽。除了一些圖像的質量很差外,這種方法效果很好。它似乎用非常低的顏色托盤保存。您可以在http://kalpaitch.com/index.php?filter=white看到的結果 - 點擊標題爲「白衣白」的第一個縮略圖php imagecopyresampled質量差
下面是用於圖像重採樣代碼:
function resizeImg($name, $extension, $size1, $size2) {
if (preg_match('/jpg|jpeg|JPG|JPEG/',$extension)){
$image = imagecreatefromjpeg($name);
}
if (preg_match('/gif|GIF/',$extension)){
$image = imagecreatefromgif($name);
}
$old_width = imageSX($image);
$old_height = imageSY($image);
$old_aspect_ratio = $old_width/$old_height;
if($size2 == 0){
$new_aspect_ratio = $old_aspect_ratio;
if($old_width > $old_height){
$new_width = $size1;
$new_height = $new_width/$old_aspect_ratio;
} else {
$new_height = $size1;
$new_width = $new_height * $old_aspect_ratio;
}
} elseif($size2 > 0){
$new_aspect_ratio = $size1/$size2;
//for landscape potographs
if($old_aspect_ratio >= $new_aspect_ratio) {
$x1 = round(($old_width - ($old_width * ($new_aspect_ratio/$old_aspect_ratio)))/2);
$old_width = round($old_width * ($new_aspect_ratio/$old_aspect_ratio));
$y1 = 0;
$new_width = $size1;
$new_height = $size2;
//for portrait photographs
} else{
$x1 = 0;
$y1 = 0;
$old_height = round($old_width/$new_aspect_ratio);
$new_width = $size1;
$new_height = $size2;
}
}
$new_image = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image, $image, 0, 0, $x1, $y1, $new_width, $new_height, $old_width, $old_height);
return $new_image;
非常感謝
附:
[從服務器中刪除照片] 這裏是上傳代碼的其餘部分:
// Move the original to the right place
$result = @move_uploaded_file($image['tmp_name'], $origlocation);
// Resize the image and save the thumbnail
$new_image = resizeImg($origlocation, $extension, 500, 0);
if (preg_match("/gif/",$extension)){
imagegif($new_image, $normallocation);
} else {
imagejpeg($new_image, $normallocation);
}
// Resize the image and save the thumbnail
$new_image = resizeImg($origlocation, $extension, 190, 120);
if (preg_match("/gif/",$extension)){
imagegif($new_image, $thumblocation);
} else {
imagejpeg($new_image, $thumblocation);
}
你能展示一個事前後的例子嗎? – 2010-02-27 00:00:10
我不是100%清楚,但它聽起來像你得到的一些圖像是一定的大小,你的腳本實際上調整它大於它最初?如果你這樣做,質量將會很糟糕。 – Jage 2010-02-27 00:02:56
如果只給出一個尺寸,則腳本不會按比例調整圖像大小。如果給出兩種尺寸,它將調整尺寸並裁剪其餘部分而不改變寬高比。 重採樣的圖像總是比原始圖像的分辨率低得多。上面的照片不是原始的,它們都是相同的分辨率,但之前用photoshop保存,而後一個用我的腳本保存。 – kalpaitch 2010-02-27 00:10:31