簡単にするために、画像のサムネイルを表示する必要のあるWebページがあるとします。イメージの場所はデータベースに保存されます(イメージはAmazon S3に保存されます)。クライアントに配信される前に大規模なイメージを縮小することは可能ですか?こうすることで、すべてのイメージのサムネイルを保存する必要がなくなり、クライアントはより小さなファイルをダウンロードできます。asp.netで画像のサイズを変更する
答えて
もちろん、問題ありません。 Web上には、データベースから画像を整理する方法を示す豊富なリソースがあります。だから私はここでそれを複製しません。
イメージをロードしたら、.NETを使用してイメージを簡単に縮小できます。次のURLに例があります。あなたがやっていることを正確にはしませんが、イメージのサムネイルを生成します。
http://blackbeltcoder.com/Articles/graphics/creating-website-thumbnails-in-asp-net
はい。
Response.Clear()を実行するASP.Netページを作成し、レスポンスにContent-Type-headerを設定し、イメージのバイナリデータを(Responseを介して)送信します。イメージはオンザフライでサイズ変更することができますが、ディスクなどにしばらくの間キャッシュすることをおすすめします。次に、画像をHTMLから< img src = "http://server/yourimagepage.aspx" >という名前で参照します。送信前にメモリに画像を保存するには、MemStreamを使用できます。
私はサンプルコードを持っていますが、私の目の前にはありません。申し訳ありません。 :)
このトピックに関するすべてのチュートリアルでは状況が過度に簡素化され、ほぼすべてがのリークメモリです。それは長い読書ですが、you should know about the 29 image resizing pitfallsを避けることができます。
I wrote a library to do server-side dynamic image resizing safely。 1つのチュートリアルや10で正しく実行できるものではありません。バグの80%は解決できますが、100%は解決できません。このリソースを大量に消費する何かをしていると、バグやメモリリークを許容することができません。
コアライブラリはフリーでオープンソースですが、Amazon S3プラグインはPerformance editionの一部で、ライセンス料は249ドルです。 Performance Editionには、S3、MS SQL、Azure、MongoDB GridFS、CloudFrontの統合、テラバイトスケールのディスクキャッシングとmemcachingのソース、サンプル、ドキュメントが付属しています。
私がアクセスしている統計から、imageresizing.netはその種のライブラリとして最も広く使われているようです。それは少なくとも5つのソーシャルネットワークを実行し、20TBもの大きさの画像収集に使用されます。ほとんどの大規模サイトではS3プラグインが使用されていますが、ローカルストレージ(またはSAN)はスケーラビリティがあまり高くありません。
+1 for imageresizing.net - フル機能、高速、セットアップが容易で、拡張性があり、手頃な価格です。とにかくバグにぶつかるでしょう。 – jaminto
これはSystem.Web.Helpers.WebImage
にあるWebImage
クラスを使用すると実現できます。
この素晴らしい子供を使って、サイズ変更された画像を即座に出力できます。
サンプルコード:ここではそれについて
public void GetPhotoThumbnail(int realtyId, int width, int height)
{
// Loading photos’ info from database for specific Realty...
var photos = DocumentSession.Query<File>().Where(f => f.RealtyId == realtyId);
if (photos.Any())
{
var photo = photos.First();
new WebImage(photo.Path)
.Resize(width, height, false, true) // Resizing the image to 100x100 px on the fly...
.Crop(1, 1) // Cropping it to remove 1px border at top and left sides (bug in WebImage)
.Write();
}
// Loading a default photo for realties that don't have a Photo
new WebImage(HostingEnvironment.MapPath(@"~/Content/images/no-photo100x100.png")).Write();
}
より:Resize image on the fly with ASP.NET MVC
ここでASPから直接WebImage
と連携する方法を示しています素晴らしいチュートリアルです。NETサイト:
- 1. ASP.NETで画像サイズを変更 -
- 2. レスポンシブな画像 - 異なる画面サイズで画像のサイズを変更する
- 3. 画像のサイズ変更サービス
- 4. iphone画像のサイズ変更
- 5. 画像のサイズ変更
- 6. 画像のサイズを変更する
- 7. マゼンタギャラリー画像のサイズを変更する
- 8. パワーポイント2007で画像のサイズを変更
- 9. 画像をドロップ、トリミング、サイズ変更する
- 10. JavaMEサイズ変更画像
- 11. アップロード画像、トリミング、サイズ変更
- 12. ビットマップで画像をxmlでサイズ変更
- 13. 画像のサイズを変更するGWT画像クリックハンドラー
- 14. 画像のサイズを変更してアップロードする画像アップロードウィジェット
- 15. Pgmagick画像を幅でサイズ変更
- 16. 方向変更の画像のサイズを変更する方法..?
- 17. 画面サイズ/解像度に基づいて画像のサイズを変更する
- 18. ASP.Net MVC画像アップロードダウンスケーリングまたはパディングによるサイズ変更
- 19. 複数の画像を切り取ってASP.Netでサイズを変更する
- 20. ビットマップ画像のサイズを変更
- 21. は、画像のサイズを変更して
- 22. uitableviewcell画像のサイズを変更
- 23. PHP Excel画像のサイズを変更
- 24. Python Magickwand pdf画像を変換して画像のサイズを変更する
- 25. アンドロイドで画像を回転しながら画像のサイズを変更する
- 26. 画像の解像度を画像のサイズに合わせて変更する
- 27. ピクチャボックスの背景画像のサイズ変更
- 28. ウェブページの背景画像のサイズ変更
- 29. Javaのヘッドレスバイキュービック画像のサイズ変更
- 30. オーバーライドによるグライド画像のサイズ変更は、画像のサイズを変更しません。
ただ、完全な画像を常に転送する必要があることに注意することは、唯一の違いは、ワイヤの下にそれを引っ張っされます誰です。つまり、イメージ操作を行うことができる 'HttpHandler'を実装することができます。 –
あなたのイメージはS3上にあると言います - あなたのアプリケーションは単一のサーバー上で動作しているのですか、それともクラウドアプリケーションですか?大規模な画像を読み込んでサイズを変更するには、単一のサーバーでアプリを実行している場合には必ずしも必要ではない、かなりのオーバーヘッドがあります。まだ作成されていないサムネイルを作成してディスクに保存するだけで、サムネイルが変更されない限りイメージ上でコードを再実行する必要はありません。 – BenAlabaster
[ImageResizing.Net](http://imageresizing.net)プロジェクトでは、S3イメージのサイズ変更とディスクキャッシュの両方を提供しています。 –