0

次のシナリオがあります。約600枚の写真があります。ほとんどのテーマの下部にはロゴがありますが、それはブランディングの問題のため切り取る必要がありますが、テーマのすべてではありません.カット後の画像リストは高さと幅に制限されているため、下から 57 ピクセルを切り取るメソッド クラスで起動するハイパーリンクをテーマに追加します。

URLは次のようになります

cut.php?target= http://example.com/hideit/2012/03/myimage.jpg

実行後に get パラメータをリセットして、ページの更新時に問題が発生しないようにしたいのですが、その画像から定義されたピクセルを再度カットします。私は次のことを試していました

function cutAndsave($jpg){              
    $folder = explode('/', $jpg);
    $path = 'I:\\xampp\\htdocs\\hideit\\'. $folder[4]. '\\'. $folder[5] .'\\'.$folder[6] ;      

    list($width, $height) = getimagesize($jpg);     
    $offset_x = 0;
    $offset_y = 0;      
    $new_height = $height - 57;
    $new_width = $width;        
    $image = imagecreatefromjpeg($jpg);
    $new_image = imagecreatetruecolor($new_width, $new_height);
    imagecopy($new_image, $image, 0, 0, $offset_x, $offset_y, $width, $height);             
    header('Content-Type: image/jpeg');     
    imagejpeg($new_image,$path, 90);
    header("Location: /cat.php/");
    die();      
    }

しかし、私の場合、最後のヘッダー呼び出しは機能しません

4

2 に答える 2

1

目前の具体的な問題は、画像を出力したにHTTP ヘッダーを送信しようとしていることです。HTTP ヘッダーは、コンテンツの前にのみ送信できます。結局のところ、それらはヘッダーです。

より大きな問題は、その考えがナンセンスだということです。

クライアントは URL を要求しますexample.com/image.php?id=42.jpg。この URL はファイル名と考えることができます。画像はファイル名/URL で識別されます。別の URL、別の画像。また、これが PHP スクリプトであり、どこかのハードディスク上の物理ファイルではないことも重要ではありません。その詳細はクライアントには関係ありません。クライアントは URL を要求し、代わりに画像を受け取ります。重要なのはそれだけです。画像がデータ ストレージからそのまま読み取られるか、オンザフライでスクリプトによってサイズ変更されるか、舞台裏でユニコーンによってライブ描画されるかは問題ではありません。それは実装の詳細です。

URL リクエスト、レスポンス。これは、Web サーバーを操作するために理解する必要がある重要な概念です。

そのため、「URL パラメータのリセット」は無意味です。そんなことはできません。クライアントを別の URL にリダイレクトできますが、それは別のファイル/URL です。クライアントに画像を取得させたい場合は、クライアントが URL を要求するたびに画像で応答します。ユーザーがページを更新して、クライアントが再度 URL を要求した場合は、それで問題ありません。

画像の切り取りを何度も行いたくない場合は、サイズ変更されたファイルをキャッシュします。コードで、次を確認します。

  1. ああ、誰かが画像 #42 をリクエストしています。
  2. 画像 #42 のサイズを変更したバージョンは既にありますか?
    • いいえの場合は、サイズを変更したバージョンを作成し、どこかに保存してください。
  3. サイズ変更された画像 #42 を提供します。

さらに、クライアントのキャッシュ動作に影響を与える HTTP ヘッダーを設定できるため、クライアントは画像をキャッシュに保持し、毎回再要求することはありません。


元を上書きしないのと同じくらい簡単な場合にも。常にオリジナルをそのまま維持し、カット バージョンはそのコピーにする必要があります。そのコピーは、上記の方法で生成するか、オリジナルがアップロードされたときに生成できます。ただし、画像を処理済みかどうかによって URL の動作を変更しないでください。

于 2013-02-15T09:55:45.883 に答える
0

行にエラーがありますheader("Location: /cat.php/");

そのはず

header("Location: /cut.php");

最後のページに戻りたいだけの場合。

あなたがあなたのイメージをさらに見せたいならば、あなたはすることができます

header("Location: /cut.php?show=$path")

<img>次に、タグを出力するスクリプトをファイルで実行します。

于 2013-02-15T08:44:09.887 に答える