Php 如何在调整上传图像大小时保持纵横比
我有一个问题陈述,需要维护上传图像的纵横比 上传照片时,您需要创建三种尺寸,a) 310X230(Thumnail)b)960X400(详细图像)c)原始尺寸(全尺寸 图像)将使用精确的尺寸创建尺寸。如果照片是 不等于任何尺寸的长宽比,然后缩放到该尺寸, 然后修剪多余的部分 我已经使用PHPGD库实现了上传3种不同大小的图像,代码如下Php 如何在调整上传图像大小时保持纵横比,php,gd,Php,Gd,我有一个问题陈述,需要维护上传图像的纵横比 上传照片时,您需要创建三种尺寸,a) 310X230(Thumnail)b)960X400(详细图像)c)原始尺寸(全尺寸 图像)将使用精确的尺寸创建尺寸。如果照片是 不等于任何尺寸的长宽比,然后缩放到该尺寸, 然后修剪多余的部分 我已经使用PHPGD库实现了上传3种不同大小的图像,代码如下 if($_SERVER["REQUEST_METHOD"] == "POST") { $image =$_FILES["file"]["name
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$image =$_FILES["file"]["name"];
$uploadedfile = $_FILES['file']['tmp_name'];
if ($image)
{
$filename = stripslashes($_FILES['file']['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{
$change='<div class="msgdiv">Unknown Image extension </div> ';
$errors=1;
}
else
{
$size=filesize($_FILES['file']['tmp_name']);
if ($size > MAX_SIZE*1024)
{
$change='<div class="msgdiv">You have exceeded the size limit!</div> ';
$errors=1;
}
if($extension=="jpg" || $extension=="jpeg" )
{
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png")
{
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
}
else
{
$src = imagecreatefromgif($uploadedfile);
}
//echo $src;
list($width,$height)=getimagesize($uploadedfile);
$newwidth=$width;
$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);
$newwidth1=310;
$newheight1=230;
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);
$newwidth2=960;
$newheight2=400;
$tmp2=imagecreatetruecolor($newwidth2,$newheight2);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);
imagecopyresampled($tmp2,$src,0,0,0,0,$newwidth2,$newheight2,$width,$height);
$filename = "images/medium/". $_FILES['file']['name'];
$filename1 = "images/thumbnail/small". $_FILES['file']['name'];
$filename2 = "images/full/". $_FILES['file']['name'];
imagejpeg($tmp,$filename,100);
imagejpeg($tmp1,$filename1,100);
imagejpeg($tmp2,$filename2,100);
imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
imagedestroy($tmp2);
}}
}
if($\u服务器[“请求\u方法”]=“发布”)
{
$image=$\u文件[“文件”][“名称”];
$uploadedfile=$\u文件['file']['tmp\u名称'];
如果($image)
{
$filename=stripslashes($_FILES['file']['name']);
$extension=getExtension($filename);
$extension=strtolower($extension);
如果(($extension!=“jpg”)&&($extension!=“jpeg”)&&($extension!=“png”)&&($extension!=“gif”))
{
$change='Unknown Image extension';
$errors=1;
}
其他的
{
$size=filesize($_FILES['file']['tmp_name']);
如果($size>MAX_size*1024)
{
$change='您已超过大小限制!';
$errors=1;
}
如果($extension==“jpg”| |$extension==“jpeg”)
{
$uploadedfile=$\u文件['file']['tmp\u名称'];
$src=imagecreatefromjpeg($uploadedfile);
}
else if($extension==“png”)
{
$uploadedfile=$\u文件['file']['tmp\u名称'];
$src=imagecreatefrompng($uploadedfile);
}
其他的
{
$src=imagecreatefromgif($uploadedfile);
}
//echo$src;
列表($width,$height)=getimagesize($uploadedfile);
$newwidth=$width;
$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);
$newwidth1=310;
$newheight1=230;
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);
$newwidth2=960;
$newheight2=400;
$tmp2=imagecreatetruecolor($newwidth2,$newheight2);
imagecopyresampled($tmp、$src、0,0,0、$newwidth、$newheight、$width、$height);
imagecopyresampled($tmp1、$src、0,0,0、$newwidth1、$newheight1、$width、$height);
imagecopyresampled($tmp2,$src,0,0,0,$newwidth2,$newheight2,$width,$height);
$filename=“images/medium/”$_FILES['file']['name'];
$filename1=“images/缩略图/small”。$_FILES['file']['name'];
$filename2=“images/full/”$_FILES['file']['name'];
imagejpeg($tmp,$filename,100);
imagejpeg($tmp1,$filename1100);
imagejpeg($tmp2,$filename2100);
(1)(src);
图像处理(tmp);
图像处理(tmp1美元);
图像处理(tmp2美元);
}}
}
调整多个图像的大小和裁剪都非常复杂,但这里有一个可能适合您的解决方案:
if($_SERVER["REQUEST_METHOD"] == "POST"){
$image =$_FILES["file"]["name"];
$uploadedfile = $_FILES['file']['tmp_name'];
if($image){
$filename = stripslashes($_FILES['file']['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if(($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) {
$change='<div class="msgdiv">Unknown Image extension </div> ';
$errors=1;
} else {
$size=filesize($_FILES['file']['tmp_name']);
if($size > MAX_SIZE*1024){
$change='<div class="msgdiv">You have exceeded the size limit!</div> ';
$errors=1;
}
if($extension=="jpg" || $extension=="jpeg" ) {
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
} else if($extension=="png"){
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
} else {
$src = imagecreatefromgif($uploadedfile);
}
list($width,$height)=getimagesize($uploadedfile);
/* ORIGINAL ASPECT RATIO */
$original_aspect_ratio = $width / $height;
/* RESIZE AND CROP THUMBNAIL (MEDIUM SIZE) */
$new_width = 960; // SET DESIRED WIDTH
$new_height = 400; // SET DESIRED HEIGHT
$new_aspect_ratio = $new_width / $new_height;
if ($original_aspect_ratio > $new_aspect_ratio) {
/* source image is wider */
$temp_height = $new_height;
$temp_width = (int) ($new_height * $original_aspect_ratio);
} else {
/* source image is similar or taller */
$temp_width = $new_width;
$temp_height = (int) ($new_width / $original_aspect_ratio);
}
/* Resize to a temporary GD image */
$temp = imagecreatetruecolor($temp_width, $temp_height);
imagecopyresampled($temp,$src,0,0,0,0,$temp_width,$temp_height,$width,$height);
/* Copy cropped region from temporary image into the desired GD image */
$x0 = ($temp_width - $new_width) / 2;
$y0 = ($temp_height - $new_height) / 2;
$medium = imagecreatetruecolor($new_width, $new_height);
imagecopy($medium,$temp,0,0,$x0,$y0,$new_width,$new_height);
/* SAVE TO FILE AND CLEAN UP */
imagedestroy($temp);// CLEANUP TEMP IMAGE
$medium_filename = "images/medium/". $_FILES['file']['name'];
imagejpeg($medium,$medium_filename,100);
imagedestroy($medium);
/* RESIZE AND CROP SMALL IMAGES, SAME PROCEDURE AS ABOVE */
$new_width = 310; // SET DESIRED WIDTH
$new_height = 230; // SET DESIRED HEIGHT
$new_aspect_ratio = $new_width / $new_height;
if ($original_aspect_ratio > $new_aspect_ratio) {
$temp_height = $new_height;
$temp_width = (int) ($new_height * $original_aspect_ratio);
} else {
$temp_width = $new_width;
$temp_height = (int) ($new_width / $original_aspect_ratio);
}
$temp = imagecreatetruecolor($temp_width, $temp_height);
imagecopyresampled($temp,$src,0,0,0,0,$temp_width,$temp_height,$width,$height);
$x0 = ($temp_width - $new_width) / 2;
$y0 = ($temp_height - $new_height) / 2;
$small = imagecreatetruecolor($new_width, $new_height);
imagecopy($small,$temp,0,0,$x0,$y0,$new_width,$new_height);
/* SAVE TO FILE AND CLEAN UP */
imagedestroy($temp);// CLEANUP TEMP IMAGE
$small_filename = "images/thumbnail/small". $_FILES['file']['name'];
imagejpeg($small,$small_filename,100);
imagedestroy($small);
/* ORIGINAL SIZE. NO RESIZING OR CROPPING... NOT NEEDED? YOU DECIDE... */
$full=imagecreatetruecolor($width,$height);
imagecopyresampled($full,$src,0,0,0,0,$width,$height,$width,$height);
/* SAVE TO FILE AND CLEAN UP */
$full_filename = "images/full/". $_FILES['file']['name']; // ORIGINAL
imagejpeg($full,$full_filename,100);
imagedestroy($full);
imagedestroy($src); // CLEAN UP ORIGINAL SOURCE FILE
}
}
}
if($\u服务器[“请求\u方法”]=“发布”){
$image=$\u文件[“文件”][“名称”];
$uploadedfile=$\u文件['file']['tmp\u名称'];
如果($image){
$filename=stripslashes($_FILES['file']['name']);
$extension=getExtension($filename);
$extension=strtolower($extension);
如果(($extension!=“jpg”)&&($extension!=“jpeg”)&&($extension!=“png”)&&($extension!=“gif”)){
$change='Unknown Image extension';
$errors=1;
}否则{
$size=filesize($_FILES['file']['tmp_name']);
如果($size>MAX_size*1024){
$change='您已超过大小限制!';
$errors=1;
}
如果($extension==“jpg”| |$extension==“jpeg”){
$uploadedfile=$\u文件['file']['tmp\u名称'];
$src=imagecreatefromjpeg($uploadedfile);
}else if($extension==“png”){
$uploadedfile=$\u文件['file']['tmp\u名称'];
$src=imagecreatefrompng($uploadedfile);
}否则{
$src=imagecreatefromgif($uploadedfile);
}
列表($width,$height)=getimagesize($uploadedfile);
/*原始纵横比*/
$original_aspect_ratio=$width/$height;
/*调整大小并裁剪缩略图(中等大小)*/
$new_width=960;//设置所需的宽度
$new_height=400;//设置所需高度
$new_aspect_ratio=$new_width/$new_height;
if($原始纵横比>$新纵横比){
/*源图像更宽*/
$temp_height=$new_height;
$temp\u width=(int)($new\u height*$original\u aspect\u ratio);
}否则{
/*源图像类似或更高*/
$temp_width=$new_width;
$temp\u height=(int)($new\u width/$original\u aspect\u ratio);
}
/*将大小调整为临时GD图像*/
$temp=ImageCreateTureColor($temp\u宽度,$temp\u高度);
imagecopyresampled($temp,$src,0,0,0,$temp_-width,$temp_-height,$width,$height);
/*将裁剪区域从临时图像复制到所需的GD图像中*/
$x0=($temp\u width-$new\u width)/2;
$y0=($temp\U height-$new\U height)/2;
$medium=ImageCreateTureColor($new\u width,$new\u height);
图像复制($medium、$temp、0,0、$x0、$y0、$new\u width、$new\u height);
/*保存到文件并清理*/
imagedestroy($temp);//清理临时映像
$medium\u filename=“images/medium/”$\u FILES['file']['name'];
imagejpeg($medium,$medium\u文件名,100);
图像处理(中等);
/*调整大小并裁剪小图像,步骤同上*/
$new_width=310;//设置所需的宽度
$new_height=230;//设置所需高度
$new_aspect_ratio=$new_width/$new_height;
if($原始纵横比>$新纵横比){
$temp_height=$new_height;
$temp\u width=(int)($new\u height*$original\u aspect\u ratio);
}否则{
$temp_width=$new_width;
$temp\u height=(int)($new\u width/$original\u aspect\u ratio);
}
$temp=ImageCreateTureColor($temp\u宽度,$temp\u高度);
imagecopyresampled($temp,$src,0,0,0,$temp_-width,$temp_-height,$width,$height);
$x0=($temp\u width-$new\u width)/2;
$y0=($temp_