3

私は自分のクラブのユーザーを管理するための個人的なプロジェクトに取り組んでいます。このプロジェクトは、Azure を試すための実験として、無料の Azure パッケージ (少なくとも今のところ) でホストされています。彼らの記録を作成することの一部は写真を追加することなので、連絡先カード ビューを使用して、彼らが誰で、いつ来たか、写真を確認できます。

ImageResizerをインストールしたので、カメラから 10MP の写真のサイズを変更してローカルのファイル システムに保存するのは非常に簡単ですが、Azure の場合は、それらを使用して Windows Azure Web サイトに写真をアップロードBlobsする必要があるようです。 . ImageResizerのドキュメントには、Azure ブロブを操作するために使用する必要があると書かれていますが、無料ではありません。また、ベスト プラクティス#5で次のように述べています。AzureReader2

画像のサイズを事前に変更する代わりに、動的なサイズ変更を使用してください。

これは私が考えていたことではありません。ユーザー レコードを作成するときに、300x300 と 75x75 (サムネイル用) にサイズ変更しようとしていました。しかし、フル サイズの画像を BLOB として保存し、途中で動的にサイズ変更する必要がある場合は、BLOB をコンテナーにアップロードして Azure に保存する標準的な手段を使用できます。各画像を渡して、必要に応じてサイズを変更します。そうすれば、AzureReader2 を使用する必要がなくなりますか、それとも、それが何をするのか、どのように機能するのかを誤解していますか?

他に検討する方法はありますか?

クロッピングはまだ実装していませんが、実際に画像を適切に保存する方法を見つけたら、次に取り組みます。

4

3 に答える 3

11

多少の不安はありますが、私はここで astaykov に同意しません。AzureReader2 を必要とせずに、Azure で ImageResizer を使用できると思います。たぶん、「私のセットアップで動作する」と言って、それを修飾する必要があります:)

MVC 3 アプリケーションで ImageResizer を使用しています。イメージ コンテナーを備えた標準の Azure アカウントを持っています。

ビューのテストコードは次のとおりです。

@using (Html.BeginForm( "UploadPhoto", "BasicProfile", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <input type="submit" value="OK" />
}

Post Action メソッドの対応するコードは次のとおりです。

// This action handles the form POST and the upload
[HttpPost]
public ActionResult UploadPhoto(HttpPostedFileBase file)
{
    // Verify that the user selected a file
    if (file != null && file.ContentLength > 0)
    {
        string newGuid = Guid.NewGuid().ToString();

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);

        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve reference to a previously created container.
        CloudBlobContainer container = blobClient.GetContainerReference("images");

        // Retrieve reference to the blob we want to create            
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(newGuid + ".jpg");

        // Populate our blob with contents from the uploaded file.
        using (var ms = new MemoryStream())
        {
            ImageResizer.ImageJob i = new ImageResizer.ImageJob(file.InputStream,
                    ms, new ImageResizer.ResizeSettings("width=800;height=600;format=jpg;mode=max"));
            i.Build();

            blockBlob.Properties.ContentType = "image/jpeg";
            ms.Seek(0, SeekOrigin.Begin);
            blockBlob.UploadFromStream(ms);
        }
    }

    // redirect back to the index action to show the form once again
    return RedirectToAction("UploadPhoto");
}

これは、理論をテストするための「ラフで準備が整った」コードであり、確実に改善される可能性がありますが、ローカルでも Azure にデプロイされた場合でも機能します。アップロードした画像を正しくサイズ変更して表示することもできます。

これが誰かに役立つことを願っています。

于 2013-08-05T10:24:10.940 に答える
1

サイズ変更されたバージョンを azure にアップロードすることもできます。したがって、最初に元の画像を blob としてアップロードします。たとえば、/original/xxx.jpg という名前でアップロードします。次に、画像のサイズ変更を作成し、それを /thumbnail/xxx.jpg という名前で azure にアップロードします。オンザフライまたは別のスレッドでサイズ変更されたバージョンを作成する場合は、オリジナルをディスクに一時的に保存する必要がある場合があります。

于 2013-04-20T12:37:52.940 に答える
1

具体的な質問への答え:

Azure BLOB で ImageResizer を使用する場合、AzureReader2 プラグインは必要ですか?

ですYES。Image Resizer のドキュメントで説明されているように、そのプラグインは、Blob Storage から画像を読み取り/処理/提供するために使用されます。したがって、疑いの余地はありません。Image Resizer を使用する場合、AzureReader2 は、物事を正しく行うために必要なプラグインです。Blob のアップロード/サーブを処理します。

Windows Azure での Image Resizer のチームの能力には疑問がありますが、彼らは を参照Azure SDK v.2しているため、Azure SDK の最新バージョンは1.8. つまり、Azure Storage クライアント ライブラリで、バージョン1.72.x. バージョン2.xは使用することをお勧めしますが、Azure SDK 1.8 に付属しています。そのため、Azure SDK 2.0 を検索せずに、最新のものである 1.8 をインストールしてください。ところで、Nuget Package Manager を使用して Azure Storage Library v. 2.0.x をインストールします。

于 2013-03-28T20:33:59.657 に答える