Azure Functions 图像调整大小内容类型
Azure Functions Image resize Content Type
我正在使用 Azure 函数和图像操作,然后输出到一个单独的 blob 容器。
上找到了这个 "official" 示例
using ImageResizer;
public static void Run(
Stream image, // input blob, large size
Stream imageSmall, Stream imageMedium) // output blobs
{
var imageBuilder = ImageResizer.ImageBuilder.Current;
var size = imageDimensionsTable[ImageSize.Small];
imageBuilder.Build(
image, imageSmall,
new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false);
image.Position = 0;
size = imageDimensionsTable[ImageSize.Medium];
imageBuilder.Build(
image, imageMedium,
new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false);
}
public enum ImageSize
{
ExtraSmall, Small, Medium
}
private static Dictionary<ImageSize, Tuple<int, int>> imageDimensionsTable = new Dictionary<ImageSize, Tuple<int, int>>()
{
{ ImageSize.ExtraSmall, Tuple.Create(320, 200) },
{ ImageSize.Small, Tuple.Create(640, 400) },
{ ImageSize.Medium, Tuple.Create(800, 600) }
};
这是使用 run.csx
文件,但是我在 Visual Studio 2017 预览版中使用 "Azure Functions" 项目模板进行编码,该模板使用 .cs 文件。所以我的代码中的一切都几乎相同,但我的函数签名为
[FunctionName("watermark-func")]
public static void Run(
[BlobTrigger("images/{name}", Connection = "myStorage_STORAGE")]Stream image,
[Blob("watermarked-images/s-{name}", Connection = "myStorage_STORAGE")]Stream imageSmall,
[Blob("watermarked-images/m-{name}", Connection = "myStorage_STORAGE")]Stream imageMedium,
TraceWriter log)
这段代码很有魅力,它会获取传入的图像,然后将其调整为中小尺寸,然后保存到我的输出容器中。我遇到的问题是这些新创建的图像的内容类型设置为 application/octet-stream
?
有什么方法可以指定 image/jpeg
的正确类型?我已经研究过使用 CloudBlockBlob
并在 Stream imageSmall
为 CloudBlockBlob imageSmall
时设置 Properties.ContentType = "image/jpeg"
,但是我得到一个错误
Cannot bind blob to CloudBlockBlob using access write.
绑定到 CloudBlockBlob
时,您需要在属性构造函数中指定正确的访问权限,在本例中需要 ReadWrite
。
这是您的代码的示例
[Blob("watermarked-images/s-{name}", FileAccess.ReadWrite, Connection = "myStorage_STORAGE")]CloudBlockBlob imageSmall
我正在使用 Azure 函数和图像操作,然后输出到一个单独的 blob 容器。
上找到了这个 "official" 示例using ImageResizer;
public static void Run(
Stream image, // input blob, large size
Stream imageSmall, Stream imageMedium) // output blobs
{
var imageBuilder = ImageResizer.ImageBuilder.Current;
var size = imageDimensionsTable[ImageSize.Small];
imageBuilder.Build(
image, imageSmall,
new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false);
image.Position = 0;
size = imageDimensionsTable[ImageSize.Medium];
imageBuilder.Build(
image, imageMedium,
new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false);
}
public enum ImageSize
{
ExtraSmall, Small, Medium
}
private static Dictionary<ImageSize, Tuple<int, int>> imageDimensionsTable = new Dictionary<ImageSize, Tuple<int, int>>()
{
{ ImageSize.ExtraSmall, Tuple.Create(320, 200) },
{ ImageSize.Small, Tuple.Create(640, 400) },
{ ImageSize.Medium, Tuple.Create(800, 600) }
};
这是使用 run.csx
文件,但是我在 Visual Studio 2017 预览版中使用 "Azure Functions" 项目模板进行编码,该模板使用 .cs 文件。所以我的代码中的一切都几乎相同,但我的函数签名为
[FunctionName("watermark-func")]
public static void Run(
[BlobTrigger("images/{name}", Connection = "myStorage_STORAGE")]Stream image,
[Blob("watermarked-images/s-{name}", Connection = "myStorage_STORAGE")]Stream imageSmall,
[Blob("watermarked-images/m-{name}", Connection = "myStorage_STORAGE")]Stream imageMedium,
TraceWriter log)
这段代码很有魅力,它会获取传入的图像,然后将其调整为中小尺寸,然后保存到我的输出容器中。我遇到的问题是这些新创建的图像的内容类型设置为 application/octet-stream
?
有什么方法可以指定 image/jpeg
的正确类型?我已经研究过使用 CloudBlockBlob
并在 Stream imageSmall
为 CloudBlockBlob imageSmall
时设置 Properties.ContentType = "image/jpeg"
,但是我得到一个错误
Cannot bind blob to CloudBlockBlob using access write.
绑定到 CloudBlockBlob
时,您需要在属性构造函数中指定正确的访问权限,在本例中需要 ReadWrite
。
这是您的代码的示例
[Blob("watermarked-images/s-{name}", FileAccess.ReadWrite, Connection = "myStorage_STORAGE")]CloudBlockBlob imageSmall