在浏览器上显示已调整大小的图像而不将其保存在服

时间:2013-10-29 11:49:50

标签: php image

我使用了一个超级简单的图片大小调整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文件夹中删除已调整大小的图像。基本上我只是希望脚本调整图像大小并仅在浏览器本身上显示已调整大小的图像,而不是将其保存在服务器上的任何位置。可能吗。如果可以,请您建议我编辑或编辑有问题的代码。original script的信用证。

  

问题的底线是:这个脚本如何显示   在访问者的浏览器上调整图像大小而不保存任何文件(   原始的或调整大小的)服务器上的任何地方。

有人做了:我仍然试图破译这个somewhat similar thread,但仍然无能为力。我要继续更新这个空间,直到这件事情结束。我现在正在尝试unlink() method,但我无法找到要取消链接的变量,是$DestRandImageName吗? coz unlink($DestRandImageName)似乎不起作用。

最终更新:经过无数次的努力,我终于完成了它。我不认为我应该把它作为答案添加到这里,在这里。我在this tutorial获得了所有解决方案。发现如果我只需要将图像重现到浏览器而不保存它,我将需要采用不同的方法,使用PHP函数,如imagecopyresampled()imagejpeg()。很了解它,但很高兴。

0 个答案:

没有答案