问题描述
我不知道如何在PHP中调整图像大小,我的代码是:
I have no idea how to resize image in PHP, my code is:
for ($index = 1; $index <= 2; $index++) {
if (!empty($_FILES["pic$index"]["name"])) {
$ext = substr($_FILES["pic$index"]["name"], strrpos($_FILES["pic$index"]["name"], '.') + 1);
$dir = "../gallery/$mkdir";
HERE I NEED THE RESIZE OF THE TMP FILE OF IMAGE
move_uploaded_file($_FILES["pic$index"]["tmp_name"] , "$dir/img-$index.$ext");
}
}
$ mkdir =画廊文件夹的名称(有很多画廊)。
$mkdir = the name of the gallery's folder (there are many galleries).
$ dir =将放置图片的位置。
$dir = where the pics will be placed.
$ ext =图像的类型(png,gif或jpg)。
$ext = the type of the image (png, gif or jpg).
foreach循环运行两次,因为你可以上传两张照片。
foreach loop runs two times because you can upload two pics.
这个脚本运行良好,我只需要调整大小,我不知道该怎么做..
This script is working good, I just need to do resize and I dont have an idea how to do it..
推荐答案
这是我用来调整图像大小的代码。
Here is the code I'm using to resize images.
在我的情况下,我给函数原始文件名和然后是缩略图文件名。
In my case I give to the function the original file name and then the thumbnail file name.
您可以非常轻松地根据您的情况调整它。
You can adapt it for your case very easily.
public static function GenerateThumbnail($im_filename,$th_filename,$max_width,$max_height,$quality = 0.75)
{
// The original image must exist
if(is_file($im_filename))
{
// Let's create the directory if needed
$th_path = dirname($th_filename);
if(!is_dir($th_path))
mkdir($th_path, 0777, true);
// If the thumb does not aleady exists
if(!is_file($th_filename))
{
// Get Image size info
list($width_orig, $height_orig, $image_type) = @getimagesize($im_filename);
if(!$width_orig)
return 2;
switch($image_type)
{
case 1: $src_im = @imagecreatefromgif($im_filename); break;
case 2: $src_im = @imagecreatefromjpeg($im_filename); break;
case 3: $src_im = @imagecreatefrompng($im_filename); break;
}
if(!$src_im)
return 3;
$aspect_ratio = (float) $height_orig / $width_orig;
$thumb_height = $max_height;
$thumb_width = round($thumb_height / $aspect_ratio);
if($thumb_width > $max_width)
{
$thumb_width = $max_width;
$thumb_height = round($thumb_width * $aspect_ratio);
}
$width = $thumb_width;
$height = $thumb_height;
$dst_img = @imagecreatetruecolor($width, $height);
if(!$dst_img)
return 4;
$success = @imagecopyresampled($dst_img,$src_im,0,0,0,0,$width,$height,$width_orig,$height_orig);
if(!$success)
return 4;
switch ($image_type)
{
case 1: $success = @imagegif($dst_img,$th_filename); break;
case 2: $success = @imagejpeg($dst_img,$th_filename,intval($quality*100)); break;
case 3: $success = @imagepng($dst_img,$th_filename,intval($quality*9)); break;
}
if(!$success)
return 4;
}
return 0;
}
return 1;
}
返回代码仅用于区分不同类型的错误。
The return codes are just here to differentiate between different types of errors.
通过回顾那段代码,我不喜欢神奇的数字技巧。我将不得不改变它(例如通过例外)。
By looking back at that code, I don't like the "magic number" trick. I'm gonna have to change that (by exceptions for example).
if (!empty($_FILES["pic$index"]["name"])) {
$ext = substr($_FILES["pic$index"]["name"], strrpos($_FILES["pic$index"]["name"], '.') + 1);
$dir = "../gallery/$mkdir";
// Move it
if(move_uploaded_file($_FILES["pic$index"]["tmp_name"] , "$dir/img-$index.$ext.tmp"))
{
// Resize it
GenerateThumbnail("$dir/img-$index.$ext.tmp","$dir/img-$index.$ext",600,800,0.80);
// Delete full size
unlink("$dir/img-$index.$ext.tmp");
}
}
使用move_uploaded_file移动它(推荐)然后你可以调整大小并将其发送到它的最终目的地。您可能甚至不需要.tmp,您可以使用。
Use move_uploaded_file to move it (recommanded) and then you can resize it and send it to it's final destination. You might not even need the ".tmp", you can use.
// Move it
if(move_uploaded_file($_FILES["pic$index"]["tmp_name"] , "$dir/img-$index.$ext"))
// Resize it
GenerateThumbnail("$dir/img-$index.$ext","$dir/img-$index.$ext",600,800);
这篇关于在上传PHP之前调整图像大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!