如何将图像文件调整为可选大小

tar*_*ras 0 php image gd2 image-scaling

我有图像上传表格,用户附加图像文件,并选择图像大小来调整上传的图像文件(200kb,500kb,1mb,5mb,原始文件).然后我的脚本需要根据用户的可选大小调整图像文件大小,但我不知道如何实现此功能,

例如,用户上传一个1mb大小的图像,如果用户选择200KB来调整大小,那么我的脚本应该保存200kb大小.

有没有人知道或有类似任务的经验?

谢谢你提前回复.

cle*_*tus 5

使用GD库,使用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);
?>
Run Code Online (Sandbox Code Playgroud)

编辑:如果要将图像文件的大小调整为指定的大小,那就更难了.所有主要的图像格式都使用压缩和压缩率,因为压缩的性质不同.压缩清澈的蓝天,你会得到比你的人海更好的压缩比.

您可以做的最好是尝试特定大小尝试特定大小,看看文件大小是什么,必要时进行调整.

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
Run Code Online (Sandbox Code Playgroud)

这基本上是预期压缩比的近似因素.我希望你有一些容忍度(比如+/- 5%),你可以根据需要调整数字.

没有直接的方法可以调整大小到特定的文件大小.最后,我要补充说,调整大小到特定的文件大小是相当不寻常的.调整到特定的高度和/或宽度(保持纵横比)是更常见和预期的(由用户).

更新:正确指出,这会导致文件大小错误.当您应用两次(一次到高度,一次到宽度)时,比率需要是文件大小比率的平方根.