要使用PHP將圖片壓縮到指定大小,您可以使用以下方法:
imagecopyresampled()
函數來重新采樣圖片,以保持適當的圖像質量。filesize()
函數檢查壓縮后的文件大小,并根據需要進行調整。以下是一個使用GD庫將圖片壓縮到指定大小的示例代碼:
function compress_image($source, $destination, $quality, $target_size) {
// 獲取原始圖片尺寸
list($source_width, $source_height, $source_type) = getimagesize($source);
// 根據原始圖片類型創建圖片資源
switch ($source_type) {
case IMAGETYPE_GIF:
$source_image = imagecreatefromgif($source);
break;
case IMAGETYPE_JPEG:
$source_image = imagecreatefromjpeg($source);
break;
case IMAGETYPE_PNG:
$source_image = imagecreatefrompng($source);
break;
default:
return false;
}
// 計算新的尺寸以保持縱橫比
$ratio = min($target_size / $source_width, $target_size / $source_height);
$new_width = intval($source_width * $ratio);
$new_height = intval($source_height * $ratio);
// 創建一個新的空白圖片資源
$destination_image = imagecreatetruecolor($new_width, $new_height);
if ($destination_image === false) {
return false;
}
// 保持alpha通道(適用于PNG)
if ($source_type == IMAGETYPE_PNG) {
imagealphablending($destination_image, false);
imagesavealpha($destination_image, true);
$transparent = imagecolorallocatealpha($destination_image, 255, 255, 255, 127);
imagefilledrectangle($destination_image, 0, 0, $new_width, $new_height, $transparent);
}
// 重新采樣圖片并保存到目標文件
imagecopyresampled($destination_image, $source_image, 0, 0, 0, 0, $new_width, $new_height, $source_width, $source_height);
switch ($source_type) {
case IMAGETYPE_GIF:
imagegif($destination_image, $destination);
break;
case IMAGETYPE_JPEG:
imagejpeg($destination_image, $destination, $quality);
break;
case IMAGETYPE_PNG:
imagepng($destination_image, $destination, 9 - ($quality / 10));
break;
}
// 銷毀圖片資源
imagedestroy($source_image);
imagedestroy($destination_image);
return $destination;
}
$source = 'path/to/input/image.jpg'; // 輸入圖片路徑
$destination = 'path/to/output/compressed_image.jpg'; // 輸出圖片路徑
$quality = 75; // 圖片質量(0-100)
$target_size = 100000; // 目標大小(字節)
$compressed_image = compress_image($source, $destination, $quality, $target_size);
if ($compressed_image !== false) {
echo "Image compressed successfully!";
} else {
echo "Failed to compress image.";
}
請注意,這個示例代碼僅適用于JPEG和PNG圖片。對于GIF圖片,由于它不支持透明度,因此不需要處理alpha通道。此外,這個示例代碼沒有實現自動調整圖片尺寸的功能,而是直接計算新的尺寸以保持縱橫比,這可能會導致圖片超出目標大小。您可能需要進一步的邏輯來確保壓縮后的圖片大小不超過指定的目標大小。