PHP图像使用宽高比调整大小

时间:2017-03-18 21:27:15

标签: php image-processing gd image-resizing

我有这个PHP脚本,可以将图像大小调整为50%(或任何预设的百分比)

$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);

现在如果我想将$ new_width指定为1200(px)并告诉$ new_height自动计算保持宽高比并将新图像的名称设置为“test-2.jpg”

$filename = 'test.jpg';

// Content type
header('Content-Type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = 1200;
$new_height = // MUST BE AUTO;

// 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);

2 个答案:

答案 0 :(得分:3)

这是你的意思吗?

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = 1200;
$new_height = ($height/$width)*$new_width;

答案 1 :(得分:2)

"保持宽高比"意味着必须遵循以下等式:

$new_height / $new_width == $height / $width

因此,计算新高度的等式是:

$new_height = ceil($height * ($new_width/$width));

请注意ceil确保新高度为整数值且至少为1(假设新宽度和旧宽度+高度均为正值)。