3

我正在开发一个个人项目来管理我的俱乐部的用户,它托管在免费的 Azure 包上(至少现在是这样),部分是作为试用 Azure 的实验。创建他们的记录的一部分是添加照片,所以我有一个联系人卡片视图,可以让我看到他们是谁,他们什么时候来的和一张照片。

我已经安装了ImageResizer,从我的相机调整 10MP 照片的大小并将它们保存到本地文件系统非常容易,但似乎对于 Azure,我需要使用它们Blobs图片上传到 Windows Azure 网站,这对我来说是新的. ImageResizer 上的文档说我需要使用AzureReader2它才能使用 Azure blob,但它不是免费的。它还在他们的最佳实践#5中说

使用动态调整大小而不是预先调整图像大小。

这不是我想的,在创建用户记录时,我打算将大小调整为 300x300 和 75x75(用于缩略图)。但是,如果我应该将全尺寸图像存储为 blob 并在输出时动态调整大小,那么我可以使用标准方法将blob 上传到容器中以将其保存到 Azure,然后当我想显示图像时使用 ImageResizer 和将每个图像传递给它以根据需要调整大小。这样就不需要使用 AzureReader2,还是我误解了它的作用/它是如何工作的?

有没有其他方法可以考虑?

我还没有实现裁剪,但是当我弄清楚如何正确存储图像时,接下来要解决这个问题

4

3 回答 3

11

带着一些恐惧,我在这里不同意 astaykov 的观点。我相信您可以将 ImageResizer 与 Azure 一起使用,而无需 AzureReader2。也许我应该通过说“它适用于我的设置”来限定它:)

我在 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

具体问题的答案:

如果将 ImageResizer 与 Azure blob 一起使用,是否需要 AzureReader2 插件?

YES。正如 Image Resizer 的文档中所述 - 该插件用于从 Blob 存储中读取/处理/提供图像。所以毫无疑问 - 如果你要使用 Image Resizer,AzureReader2 是你需要的插件来做正确的事情。它将负责 Blob 上传/服务。

虽然我质疑 Image Resizer 在 Windows Azure 上的团队能力,因为他们引用的是 . Azure SDK v.2,而 Azure SDK 的最新版本是1.8. 他们的意思是 Azure 存储客户端库,它具有版本1.72.x. 而推荐使用的版本2.x是 Azure SDK 1.8 附带的。所以,不要搜索 Azure SDK 2.0,安装最新的 1.8。顺便说一句,使用 Nuget 包管理器安装 Azure Storage Library v. 2.0.x。

于 2013-03-28T20:33:59.657 回答
1

您还可以将调整大小的版本上传到 azure。因此,您首先将原始图像作为 blob 上传,例如名称为 /original/xxx.jpg;然后您创建图像的调整大小并将其上传到azure,名称为/thumbnail/xxx.jpg。如果您想即时或在单独的线程上创建调整大小的版本,您可能需要将原始版本临时保存到磁盘。

于 2013-04-20T12:37:52.940 回答