【发布时间】:2013-11-20 12:17:01
【问题描述】:
我正在寻求帮助。 我有以下代码上传图像并创建缩略图并将它们存储在适当的文件夹中......但我的问题是空间......上传的主图像是巨大的 4320 x 3240 并且该网站需要很长时间才能加载...... 我只想要 2 张图像:主图像最大宽度 1024,缩略图最大宽度 100....
更新:现在可以调整主图像的大小并创建缩略图,但仅适用于
到目前为止,这是我的代码:
<?php ob_start();
session_start();
include("../../config.php");
ini_set("memory_limit", "500M");
$folder = "../images/stock/".$_SESSION['info_id']."";
$thumbs =$folder.'/thumbs/';
if(!file_exists($folder)){
mkdir ($folder,0777);
$uploadfolder = $folder."/";
//echo $folder.'<br>';
}
else
{
//echo 'folder already created<br>';
$uploadfolder = $folder."/";
//echo $folder.'<br>';
}
if(!file_exists($thumbs)){
mkdir($thumbs,0777);
$thumbnailfolder = $thumbs ;
//echo $thumbs.'<br>';
}else{
$thumbnailfolder = $thumbs ;
//echo $thumbnailfolder.'<br>';
}
$allowedfiletypes = array("jpeg","jpg");
//$uploadfolder = $s;
$thumbnailheight = 100; //in pixels
$imagesresizeheight = 500;
$action = $_POST['action'];
if ($action == "upload") {
//$_SESSION['result'] = "Uploading image... " ;
if(empty($_FILES['uploadimage']['name'])){
$_SESSION['result'] = "<strong>Error: File not uploaded 1!</strong><br>" ;
} else {
$uploadfilename = $_FILES['uploadimage']['name'];
$fileext = strtolower(substr($uploadfilename,strrpos($uploadfilename,".")+1));
if (!in_array($fileext,$allowedfiletypes)) { $_SESSION['result'] = "<strong>Error: Invalid file extension!</strong><br>" ; }
else {
$fulluploadfilename = $uploadfolder.$uploadfilename ;
if (move_uploaded_file($_FILES['uploadimage']['tmp_name'], $fulluploadfilename)) {
$im = imagecreatefromjpeg($fulluploadfilename);
if (!$im) { $_SESSION['result'] = "<p><strong>Error: Couldn't Resize Image!</strong><br>" ; }
else {
//// Resize Image Creation //////
$imw = imagesx($im); // uploaded image width
$imh = imagesy($im); // uploaded image height
$nh = $imagesresizeheight; // thumbnail height
$nw = round(($nh / $imh) * $imw); //thumnail width
$newim = imagecreatetruecolor ($nw, $nh);
imagecopyresampled ($newim,$im, 0, 0, 0, 0, $nw, $nh, $imw, $imh) ;
$imagefilename = $uploadfolder.$uploadfilename ;
imagejpeg($newim, $imagefilename) or die($_SESSION['result'] ="<strong>Error: Couldn't save image resize!</strong><br>");
echo $imw. $imh. $nw. $imagefilename;
//// Thumbnail Creation //////
$imw = imagesx($im); // uploaded image width
$imh = imagesy($im); // uploaded image height
$nh = $thumbnailheight; // thumbnail height
$nw = round(($nh / $imh) * $imw); //thumnail width
$newim = imagecreatetruecolor ($nw, $nh);
imagecopyresampled ($newim,$im, 0, 0, 0, 0, $nw, $nh, $imw, $imh) ;
$thumbfilename = $thumbnailfolder.$uploadfilename ;
imagejpeg($newim, $thumbfilename) or die($_SESSION['result'] ="<strong>Error: Couldn't save thumnbail!</strong><br>");
//echo $thumbfilename;
//$_SESSION['result'] ='<img src="'.$thumbfilename.'"/><br>' ;
}
} else { $_SESSION['result'] = "<strong>Error: Couldn't save file($fulluploadfilename)!</strong><br>";
}
}
}
}
//unlink($fulluploadfilename);
////////////////////////////////////////////////
//connect to mysql server
$c = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB);
if (!$c){
$_SESSION['result'] .= mysql_error().'<br>';
return;
}
if (!mysql_select_db(DB)){
$_SESSION['result'] .= mysql_error().'<br>';
mysql_close($c);
return;
}
//5. insert settings
$sql = "INSERT INTO photo(photo_id,photo_filename) VALUES ('".$_SESSION['info_id']."','".$uploadfilename."')";
if (!mysql_query($sql,$c)){
mysql_close($c);
return;
}
mysql_close($c);
//////////////////////////////////////////////
//$ref = getenv("HTTP_REFERER");
//header("Location: ".$ref);
?>
【问题讨论】:
-
您的问题到底是什么?您的代码做了什么/在哪些方面与您的预期不同?
-
我的代码上传一张图片,然后制作该图片的缩略图,然后将主图像存储在一个文件中,并将缩略图存储在缩略图文件中...我需要将主图像的大小从 4032 宽低至 1024 宽...
-
好吧,你已经知道怎么做了——这就像创建缩略图一样(几乎,这次你知道的是目标宽度而不是高度)。除了存储原始版本之外,您还可以存储第二个下采样版本(可以像原始版本一样命名,但我不建议这样做)。
-
目前正在尝试,但无法正常工作....
-
我的问题似乎是,如果图像的宽度为 2000 像素或更小,则图像会被上传、调整大小、创建缩略图并全部保存到目录。但是,当上传宽度为 4320 像素的图像时(这是我一直坚持的),脚本失败并且什么都不做......我认为它与 imagecreatefromjpeg 大小有关......