0

私は非常にシンプルな画像サイズ変更 php スクリプトを使用しています。これは、wordpress に基づいた自分のサイトの 1 つに統合しています。人々が画像を1つずつサイズ変更できるようにし、基本的にサイズ変更が完了したらブラウザに表示して、ダウンロード/保存できるようにします. ここに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 関数を使用する別のアプローチを取る必要があることを発見しました。難しい方法で学びましたが、うれしいです。

4

0 に答える 0