我正在开发一个管理我俱乐部用户的个人项目,它托管在免费的Azure软件包上(至少目前为止),部分是作为尝试Azure的实验。创建他们的记录的一部分是添加照片,所以我有一个联系人卡片视图,让我看到他们是谁,他们来的时间和照片。
我已经安装了ImageResizer并且很容易从我的相机调整10MP照片的大小并将它们保存到本地文件系统,但似乎对于Azure我需要使用他们的Blobs
来{ {3}},这对我来说是新的。 Upload Pictures to Windows Azure Web Sites表示我需要使用AzureReader2
才能使用Azure blob,但它不是免费的。它还在他们的documentation on ImageResizer#5中说
使用动态调整大小而不是预先调整图像大小。
这不是我想的,在创建用户记录时,我将调整为300x300和75x75(缩略图)。但是,如果我应该将全尺寸图像存储为blob并在出路时动态调整大小,那么我可以使用标准方法将best practices保存到Azure,然后当我想显示图像时使用ImageResizer并传递每个图像根据需要调整大小。这种方式不需要使用AzureReader2,或者我误解了它的作用/它是如何工作的?
还有其他方法可以考虑吗?
我还没有尚未实施裁剪,但当我弄清楚如何正确存储图像时,这就是解决问题
答案 0 :(得分: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上部署时都能正常工作。我还可以查看我上传的图片,这些图片已正确调整大小。
希望这有助于某人。
答案 1 :(得分: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.7
和2.x
。而版本2.x
建议使用,并随Azure SDK 1.8一起提供。因此,不要搜索Azure SDK 2.0,安装最新版本,即1.8。顺便说一句,使用Nuget包管理器安装Azure存储库v.2.0.x。
答案 2 :(得分:1)
您还可以将已调整大小的版本上传到azure。因此,您首先将原始图像上传为blob,例如名称为/original/xxx.jpg;然后你创建一个图像的大小调整并上传到azure,名称为/thumbnail/xxx.jpg。如果要在运行中或在单独的线程上创建调整大小的版本,可能需要暂时将原始版本保存到磁盘。