-4

ほぼfreespeech.netのFreeBSDWebサーバーで実行され、次のようないくつかの追加パラメーターを持つJPEGイメージを指すURLを取得する単純なWebサービス(言語の実装にはこだわらない)を作成したいと思います。

http://www.myserver.com/script.cgi?url=http://www.destination.com/image.jpg&width=320

次の操作を実行します。

  1. URLのパラメータを解析するにはどうすればよいですか?(宛先URLと処理用のいくつかの追加パラメーター)
  2. パラメータで指定されたURLで画像のコンテンツを取得するにはどうすればよいですか?
  3. 追加のパラメーターに基づいて、コンテンツに対していくつかの処理を実行します(この質問の範囲外)
  4. 処理された画像を、(テキストを返すのではなく)ブラウザに表示される画像として正しく認識されるように戻すにはどうすればよいですか?

Perlのようなスクリプト言語でこれを行うのは難しいことではないと思いますが、ステップ1、2、および4のどこから始めればよいのかわかりません。

4

5 に答える 5

1

指定したURLは無効ですが、次のようなクエリ文字列をエンコードできます: http ://www.myimageserver.com?url=http%3a%2f%2fwww.flickr.com%2fsomeimage.jpg%2f320%2f200 (ここではflickrのURLはurlencodedです。ここで、オンラインでurlencodingを試すことができます:http ://www.opinionatedgeek.com/DotNet/Tools/UrlEncode/Encode.aspx )

  1. phpを使用すると、URLのパラメーターを取得できます。PHPで「http://www.flickr.com/someimage.jpg/320/200」にアクセスするには、次のコマンドを使用します。

    $ url = $ _GET ['url']; // $ urlを文字列に設定します: "http://www.flickr.com ..."

    //...ここで解析を実行できます

  2. URLの内容を取得するには:

    $ url_content = file_get_contents($ url);

  3. これで、処理を行うことができます。

  4. また、出力を返すには、echoを使用できます。

    エコー$processed_content;

于 2012-08-17T19:13:11.823 に答える
1

私は最近PHPスクレーパーに取り組んでいるので、これらの問題のいくつかにかなり精通しています。

これらの問題については、次の解決策をお勧めします。

  1. $_GETまたは$_POSTを使用すると、パラメーターを簡単に取得できます。URLの他の部分を取得する必要がある場合は、parse_url()を使用できます。

  2. file_get_contents()は機能しますが、cURLははるかに洗練された強力なソリューションです。

  3. cURLは、ダウンロードされたファイルを含むファイルハンドルを返すことができ、その時点で処理できます。

  4. 次に、fwrite()を使用して、ファイルの内容をローカルファイルに書き込むことができます。

于 2012-08-17T19:52:34.227 に答える
0

これは例であり、jpeg画像でのみ機能します。

<?
$url = $_GET['url'];

$im = imagecreatefromjpeg($url);
header("Content-Type: image/jpeg");

for($i=0;$i<100;$i++)
{
    for($j=0;$j<100;$j++)
    {
        if(rand(0,1))
        {
            $rand = rand(0,4);
            imagesetpixel($im,$i,$j,imagecolorallocate($im, 255, 255, 255));
        }
    }
}

imagejpeg($im);
?>
于 2012-08-17T19:02:30.583 に答える
0

私はこの種のもののためにPythonが好きです。具体的には、WSGIサーバー上にあるPython WSGIアプリケーションは、アプリケーションに適しているはずです。

Pythonには、テストできる「シンプルなサーバー」が付属しています。デプロイには、CherryPyのWSGIサーバーやRocket(どちらも完全にPythonで実装されている)などのサードパーティのWSGIサーバーを見つけることができます。

GILの方がはるかに優れているため、可能であればpython 3.2をお勧めします。これは、前述したようなマルチスレッドWSGIサーバー(CherryPyやRocket)に影響を与えます。

詳細については、WSGIを参照してください。Pythonシットでは、PEP333および3333。

于 2012-08-17T19:04:35.400 に答える
0

これが私がPerlでそれをした方法です:

#!/usr/bin/perl
use CGI qw(:standard);
use IO::Handle;
use LWP::Simple;
use File::Temp;
use File::Slurp;

$url = param('url');
$width = param('width');
$height = param('height');
$content = get($url);

$in = File::Temp->new( SUFFIX => '.jpg' );
print $in $content;

$out = File::Temp->new( SUFFIX => '.jpg' );
system("convert $in -resize $width" . "x" . "$height $out");

my $q = new CGI;
print $q->header( - type => "image/jpeg", -expires => "-1d" );

$content2 = read_file($out);
print $content2;
于 2012-08-18T02:50:05.233 に答える