我使用了一个超级简单的图像调整 php 脚本,我已经将它集成在我的一个基于 wordpress 的网站上。我允许人们一个接一个地调整他们的图像大小,基本上在调整大小完成后,我在浏览器中将其显示给他们,以便他们可以下载/保存。这里是html部分。
<form action="http://awesomeness.com/wp-content/themes/awesome/resize/processupload.php" method="post" enctype="multipart/form-data" id="UploadForm">
<input name="ImageFile" type="file" />
<input type="submit" id="SubmitButton" value="Upload" />
</form>
<div id="output"></div>
还有一个小 jquery 脚本,我认为在这里展示是没有意义的。它的唯一功能是将调整大小的图像放入output-div
表格下方。下面是提到的 processupload.php 的内容。
if(isset($_POST)) {
$BigImageMaxSize = 800;
$DestinationDirectory = 'uploads/';
$Quality = 90;
if(!isset($_FILES['ImageFile']) || !is_uploaded_file($_FILES['ImageFile']['tmp_name'])) {
die('Something went wrong with Upload!');
}
$RandomNumber = uniqid();
$ImageName = str_replace(' ','-',strtolower($_FILES['ImageFile']['name']));
$ImageSize = $_FILES['ImageFile']['size'];
$TempSrc = $_FILES['ImageFile']['tmp_name'];
$ImageType = $_FILES['ImageFile']['type'];
switch(strtolower($ImageType))
{
case 'image/png':
$CreatedImage = imagecreatefrompng($_FILES['ImageFile']['tmp_name']);
break;
case 'image/gif':
$CreatedImage = imagecreatefromgif($_FILES['ImageFile']['tmp_name']);
break;
case 'image/jpeg':
case 'image/pjpeg':
$CreatedImage = imagecreatefromjpeg($_FILES['ImageFile']['tmp_name']);
break;
default:
die('Unsupported File!'); //output error and exit
}
list($CurWidth,$CurHeight)=getimagesize($TempSrc);
$ImageExt = substr($ImageName, strrpos($ImageName, '.'));
$ImageExt = str_replace('.','',$ImageExt);
$ImageName = preg_replace("/\\.[^.\\s]{3,4}$/", "", $ImageName);
$NewImageName = $ImageName.'-'.$RandomNumber.'.'.$ImageExt;
$DestRandImageName = $DestinationDirectory.$NewImageName;
if(resize_Image($CurWidth,$CurHeight,$BigImageMaxSize,$DestRandImageName,$CreatedImage,$Quality,$ImageType)) {
echo '<div id="output">';
echo '<img src="http://awesomewebsite.com/uploads/'.$NewImageName.'" alt="Resized">';
echo '</div>';
} else {
die('Resize Error'); //output error
}
}
function resize_Image($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType) {
if($CurWidth <= 0 || $CurHeight <= 0) {
return false;
}
$ImageScale = min($MaxSize/$CurWidth, $MaxSize/$CurHeight);
$NewWidth = ceil($ImageScale*$CurWidth);
$NewHeight = ceil($ImageScale*$CurHeight);
$NewCanves = imagecreatetruecolor($NewWidth, $NewHeight);
if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight))
{
switch(strtolower($ImageType))
{
case 'image/png':
imagepng($NewCanves,$DestFolder);
break;
case 'image/gif':
imagegif($NewCanves,$DestFolder);
break;
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($NewCanves,$DestFolder,$Quality);
break;
default:
return false;
}
//delete original image and free some memory
if(is_resource($NewCanves)) {imagedestroy($NewCanves);}
return true;
}
}
您可以看到,一旦调整大小,脚本会自动删除原始图像。但我也需要从我的/uploads
文件夹中删除调整大小的图像。基本上我只希望脚本调整图像大小并仅在浏览器本身上显示调整大小的图像,而不是将其保存在任何地方的服务器上。可能吗。如果可以,请建议我进行编辑或编辑有问题的代码本身。原始脚本的信用。
问题的底线是:此脚本如何在访问者浏览器上显示调整大小的图像而不在服务器上的任何位置保存任何文件(原始文件或调整大小的文件)。
尝试的事情:我仍在尝试破译这个有点相似的线程,但仍然一无所知。我将继续更新这个空间,直到这件事结束。我现在正在尝试unlink() 方法,但我找不到要取消链接的变量,是$DestRandImageName
吗?因为unlink($DestRandImageName)
这似乎不起作用。
最终更新:经过无数次小努力,我终于完成了。我不认为我应该在这里添加它作为答案。我在本教程中获得了所有解决方案。发现如果我只需要将图像复制到浏览器而不保存它,我将需要采用不同的方法,使用像imagecopyresampled()和imagejpeg()这样的 php 函数。学得很辛苦,但很高兴。