在PHP中调整图像大小 [英] Resize image in PHP
问题描述
我想写一些PHP代码,自动调整通过表单上传到147x147px的任何图像,但我不知道如何去做(我是一个相对的PHP新手)。
I'm wanting to write some PHP code which automatically resizes any image uploaded via a form to 147x147px, but I have no idea how to go about it (I'm a relative PHP novice).
到目前为止,我已成功上传图片,识别文件类型并清理名称,但我想在代码中添加调整大小功能。例如,我有一个尺寸为2.3MB,尺寸为1331x1331的测试图像,我希望代码可以缩小尺寸,我猜测它也会大大压缩图像的文件大小。
So far, I've got images uploading successfully, filetypes being recognised and names cleaned up, but I'd like to add the resize functionality into the code. For example, I've got a test image which is 2.3MB, and 1331x1331 in dimension, and I'd like the code to size it down, which I'm guessing will dramatically compress the filesize of the image, too.
到目前为止,我有以下内容:
So far, I've got the following:
if ($_FILES) {
//Put file properties into variables
$file_name = $_FILES['profile-image']['name'];
$file_size = $_FILES['profile-image']['size'];
$file_tmp_name = $_FILES['profile-image']['tmp_name'];
//Determine filetype
switch ($_FILES['profile-image']['type']) {
case 'image/jpeg': $ext = "jpg"; break;
case 'image/png': $ext = "png"; break;
default: $ext = ''; break;
}
if ($ext) {
//Check filesize
if ($file_size < 500000) {
//Process file - clean up filename and move to safe location
$n = "$file_name";
$n = ereg_replace("[^A-Za-z0-9.]", "", $n);
$n = strtolower($n);
$n = "avatars/$n";
move_uploaded_file($file_tmp_name, $n);
} else {
$bad_message = "Please ensure your chosen file is less than 5MB.";
}
} else {
$bad_message = "Please ensure your image is of filetype .jpg or.png.";
}
}
$query = "INSERT INTO users (image) VALUES ('$n')";
mysql_query($query) or die("Insert failed. " . mysql_error() . "<br />" . $query);
推荐答案
你需要使用PHP的ImageMagick 或 GD 用于处理图像的功能。
You need to use either PHP's ImageMagick or GD functions to work with images.
例如,使用GD,它就像......一样简单。
With GD, for example, it's as simple as...
function resize_image($file, $w, $h, $crop=FALSE) {
list($width, $height) = getimagesize($file);
$r = $width / $height;
if ($crop) {
if ($width > $height) {
$width = ceil($width-($width*abs($r-$w/$h)));
} else {
$height = ceil($height-($height*abs($r-$w/$h)));
}
$newwidth = $w;
$newheight = $h;
} else {
if ($w/$h > $r) {
$newwidth = $h*$r;
$newheight = $h;
} else {
$newheight = $w/$r;
$newwidth = $w;
}
}
$src = imagecreatefromjpeg($file);
$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
return $dst;
}
你可以这样调用这个函数......
And you could call this function, like so...
$img = resize_image(‘/path/to/some/image.jpg’, 200, 200);
从个人经验来看,GD的图像重新采样确实大大减少了文件大小,特别是在重新采样原始数码相机图像时。
From personal experience, GD's image resampling does dramatically reduce file size too, especially when resampling raw digital camera images.
这篇关于在PHP中调整图像大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!