Nếu bạn muốn tự động giảm kích thước ảnh về giới hạn định sẵn, bài viết này sẽ giúp bạn.

Tự động giảm kích thước ảnh về giới hạn với PHP

Phương thức xử lí

Đầu tiên, bạn thêm hàm này. Lưu ý là hàm này chỉ xử lí định dạng ảnh JPG.

function resize_image($source_image, $target_image, $max_width, $max_height = 0, $quality = 100) {
    if (!$image = @imagecreatefromjpeg($source_image)) return false;
    list($orig_width, $orig_height) = getimagesize($source_image);
    if ($max_width == 0) $max_width = $orig_width;
    if ($max_height == 0) $max_height = $orig_height;
    $width_ratio = $max_width / $orig_width;
    $height_ratio = $max_height / $orig_height;
    $ratio = min($width_ratio, $height_ratio);
    $new_width  = intval($orig_width  * $ratio);
    $new_height = intval($orig_height * $ratio);
    $new_image = imagecreatetruecolor($new_width, $new_height);
    $color = imagecolorallocatealpha($new_image, 0, 0, 0, 127);
	imagefill($new_image, 0, 0, $color);
	imagesavealpha($new_image, true);
    imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $orig_width, $orig_height);
    imagejpeg($new_image, $target_image, $quality);
    imagedestroy($image);
    imagedestroy($new_image);
    return array('w' => $new_width, 'h' => $new_height);
}

Sử dụng

Để sử dụng, bạn gọi lại hàm trên. Ví dụ mình cắt ảnh thumbnail.jpg về kích thước 750px và giảm chất lượng còn 80%.

$filepath = 'img/thumbnail.jpg';
$image_size = resize_image($filepath, $filepath, 750, 0, 80);

Chúc các bạn thành công!

5/5 (1 bình chọn)