我有圖像上傳表單,用戶附加aimage文件,並選擇圖像大小來調整上傳的圖像文件(200kb,500kb,1mb,5mb,原始大小)。然後我的腳本需要根據用戶的可選尺寸調整圖像文件的大小,但我不知道如何實現這個功能,例如,用戶上傳一個1mb大小的圖像,如果用戶選擇200KB調整大小,那麼我的腳本應該保存200kb的大小。如何將圖像文件大小調整爲可選大小
有誰知道或有類似任務的經驗嗎?
感謝你提前回復。
我有圖像上傳表單,用戶附加aimage文件,並選擇圖像大小來調整上傳的圖像文件(200kb,500kb,1mb,5mb,原始大小)。然後我的腳本需要根據用戶的可選尺寸調整圖像文件的大小,但我不知道如何實現這個功能,例如,用戶上傳一個1mb大小的圖像,如果用戶選擇200KB調整大小,那麼我的腳本應該保存200kb的大小。如何將圖像文件大小調整爲可選大小
有誰知道或有類似任務的經驗嗎?
感謝你提前回復。
隨着GD library,使用imagecopyresampled()
。
<?php
// The file
$filename = 'test.jpg';
$percent = 0.5;
// Content type
header('Content-type: image/jpeg');
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Output
imagejpeg($image_p, null, 100);
?>
編輯:如果你想將圖像文件的大小調整爲指定大小,這是一個有點困難。所有主要的圖像格式都使用不同的壓縮率和壓縮率。壓縮清澈的藍天,你會得到比人們更好的壓縮比。
,你能做的就是盡力特定的尺寸最好是嘗試一個特定的大小和查看文件大小是什麼,如果有必要調整。
Resize ratio = desired file size/actual file size
Resize multipler = square root (resize ratio)
New height = resize multiplier * actual height
New width = resize multiplier * actual width
這基本上是預期壓縮比的近似值。我希望你會有一些寬容(如+/- 5%),你可以根據需要調整數字。
還有就是要調整到一個特定的文件大小沒有直接的方法。最後我會補充說,調整大小到一個特定的文件大小是非常不尋常的。調整到特定的高度和/或寬度(保持寬高比)比用戶更常見和預期(用戶)。
更新:正確指出,這會導致文件大小錯誤。該比率需要是文件大小比率的平方根,因爲您應用了兩次(一次爲高度,一次爲寬度)。
使用在PHP提供的GD庫:
// $img is the image resource created by opening the original file
// $w and $h is the final width and height respectively.
$width = imagesx($img);$height = imagesy($img);
$ratio = $width/$height;
if($ratio > 1){
// width is greater than height
$nh = $h;
$nw = floor($width * ($nh/$height));
}else{
$nw = $w;
$nh = floor($height * ($nw/$width));
}
//centralize image
$nx = floor(($nw- $w)/2.0);
$ny = floor(($nh-$h)/2.0);
$tmp2 = imagecreatetruecolor($nw,$nh);
imagecopyresized($tmp2, $img,0,0,0,0,$nw,$nh,$width,$height);
$tmp = imagecreatetruecolor($w,$h);
imagecopyresized($tmp, $tmp2,0,0,$nx,$ny,$w,$h,$w,$h);
imagedestroy($tmp2);imagedestroy($img);
imagejpeg($tmp, $final_file);
這段代碼將原始圖像時,調整到規定的尺寸。它會首先嚐試比例方面調整圖像大小,然後裁剪+集中圖像,使其很好地落入指定的尺寸。
最終你會用一半的文件你想要的大小,因爲小數部分「調整率」被平方。如果你有一個1MB的圖像,你想要一個(大約)512KB的文件,你需要調整它的大小,以便newheight = sqrt(2)* height(同樣適用於寬度) – dcrosta 2009-09-23 03:39:27
謝謝你的有用評論 – taras 2009-09-23 03:39:50
@dcrosta:很對。固定爲sqtiply(比例)。 – cletus 2009-09-23 03:44:44