6

大規模なウェブアプリケーションで画像メディアのデータベースを維持しています。高解像度のjpgは大きく(> 15MB)、ダウンロードできるようにしないでください。次に、画像の詳細(切り抜き)へのアクセスをクライアントに提供する必要があります(ズームイン機能など)。クライアントは、画像のダウンスケーリングされたバージョンを表示し、フルスケールモード(100%)で表示する画像の領域を選択できる必要があります。

これを最もパフォーマンスの高い方法(トラフィックおよびCPUの観点から)でどのように実装できますか?高解像度の画像ファイルが保護されている限り、どのような解決策も受け入れることができます。このアプリケーションは、c#および.netFramework3.5で開発されています。

何か案は?前もって感謝します!

4

7 に答える 7

1

最初に行う必要があるのは、サーバーにアップロードする前に画像を圧縮して透かしを入れることです。次に、それらをユーザーに提示します。イメージは静的であるため、これによりCPUリソースの使用量が最小になります。

それから私は個人的にフルサイズバージョンの画像をトリミングし、圧縮されたものと並べて配置しました。このようにして、クライアントは、完全な高解像度バージョンの小さなサンプルと一緒に、完全な画像(圧縮および透かし入れされている場合でも)を表示できます。

クライアントの数が少なく、サーバーが非常に強力でない限り、オンザフライの画像操作は避けたいと思うでしょう。

于 2008-12-17T12:43:37.133 に答える
0

私は低解像度バージョンの画像をブラウザに提供し、クライアント側のクロップuiを使用して、サーバーにリクエストを送り返します。サーバーは選択範囲をクロップして高解像度で送り返します。

于 2008-12-17T12:44:00.737 に答える
0

私が父に言ったように(それはインターネットがどのように機能するかを理解していません)、あなたがそれをウェブページで見ることができればあなたはそれを保存することができます、それはそれをどうやって行うかという問題です。

于 2008-12-17T12:55:02.323 に答える
0

あなたが好きかもしれないディープズームのajaxバージョンがあります-ドラゴンを参照してください:

http://livelabs.com/seadragon-ajax/gallery/

ユーザーには低解像度バージョンの画像が表示されます。その後、好きな部分にズームインできます。

于 2008-12-17T13:01:59.983 に答える
0

まず、圧縮ファイル形式で保存するすべてのフルサイズ画像の透かし入りバージョンと、事前レンダリングされた低解像度バージョンを事前にレンダリングします。

閲覧用に低解像度の画像を提供します。次に、ユーザーがトリミングを設定するための透かし入りの高解像度画像。

確認の時点で、透かしのない画像をトリミングし、トリミングされた画像をクライアントに送信するWebサーバーに渡す2番目の専用画像処理サーバーを用意します。

そうは言っても、トリミングされた部分を集めてそれらをつなぎ合わせて透かしのない画像のフルサイズのコピーを作成するクライアント側スクリプトを作成することは可能です。

于 2008-12-17T14:38:58.803 に答える
-1

いかなる方法でもダウンロードできるようにしてはなりません。

と対立しています:

クライアントは、画像のダウンスケーリングされたバージョンを表示し、フルスケールモード(100%)で表示する画像の領域を選択できる必要があります。

...画像のすべての領域をフル解像度で表示できるようにした時点で、画像全体をつなぎ合わせることができます。そのため、(非常に不便な場合でも)効果的にフルサイズの画像を利用できるようになります。

しかし、これはどれもあなたが目標を達成するのに役立ちません。

私が行う方法は、ダウンロードする画像の領域を選択する際に使用する72dpiの透かし入りコピーを提供することです。画面のスペースが問題になる場合は、これを元の%にスケーリングできます。ユーザーに左上と右下の座標を選択してもらいます。次に、imagemagickのようなものを使用して、この領域を元の領域からコピーしてユーザーに提供します。

リソースを節約する必要がある場合は、ユーザーに事前定義されたグリッドからダウンロードさせることができます。そのため、最初にグリッド座標14:11が選択され、image_1411_crop.jpgがファイルシステムに書き込まれ、次にその座標が選択されると、ファイルが既に存在します。

編集:他の答えについてのあなたのコメントのいくつかを読んでください...

生成とサーバーサイドキャッシングをどのように行っても、同じ量の帯域幅とトラフィックを使用することになります。300dpi jpegは、生成されたばかりか、ファイルシステム上にあるかに関係なく、300dpijpegです。

CPUまたはディスクスペースを節約する必要があるかどうかを確認する必要があります。100万ギガの画像があり、ユーザーが40人しかない場合は、CPUヒットを許容できます。40ギガの画像と100万人のユーザーがいる場合は、HDDを選択してください。

于 2008-12-17T13:53:34.653 に答える
-2

ストレージにはS3を使用します。2つのバケット(公開保護)を作成し、ユーザーにダウンロードを許可したら、保護されたバケットの画像へのURLを提供します。S3 URLは、有効期限を設定して安心させることができます。

15Mbの画像を使用すると、事前に拡大縮小/トリミングされたバージョンを事前に生成する必要があることに気付くでしょう。

元のファイル以外のすべてに、ある種の透かしを使用します。(グーグルマップのように)

[編集:ズーム用のディープズームを追加]

トリミングとズームの管理については、Silverlight Deep Zoomを確認してください(デモ)。トリミングされたすべての画像を生成するユーティリティもあります。

于 2008-12-17T12:41:56.687 に答える