У меня есть функция Azure, которая изменяет размер изображения, а затем сохраняет его в другой папке контейнера.
Мой код:
private static readonly 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) }
};
private enum ImageSize
{
/// <summary>
/// The extra small
/// </summary>
ExtraSmall,
/// <summary>
/// The small
/// </summary>
Small,
/// <summary>
/// The medium
/// </summary>
Medium
}
[FunctionName("Function1")]
public static void Run(
[BlobTrigger("vehicle-images/{folder}/{name}", Connection = "")]Stream image,
string name,
[Blob("watermarked-vehicle-images/{folder}/s-{name}", FileAccess.ReadWrite, Connection = "")]CloudBlockBlob imageSmall,
[Blob("watermarked-vehicle-images/{folder}/m-{name}", FileAccess.ReadWrite, Connection = "")]CloudBlockBlob imageMedium,
TraceWriter log)
{
// Resize and save Small Image
var size = ImageDimensionsTable[ImageSize.Small];
var outputStream = new MemoryStream();
var instructions = new Instructions
{
Width = size.Item1,
Height = size.Item2,
Mode = FitMode.Max,
OutputFormat = OutputFormat.Jpeg,
JpegQuality = 85
};
ImageBuilder.Current.Build(new ImageJob(image, outputStream, instructions));
outputStream.Seek(0, SeekOrigin.Begin);
imageSmall.Properties.ContentType = "image/jpeg";
imageSmall.UploadFromStream(outputStream);
// Resize and save Medium Image.
size = ImageDimensionsTable[ImageSize.Medium];
var outputStream2 = new MemoryStream();
var instructions2 = new Instructions
{
Width = size.Item1,
Height = size.Item2,
Mode = FitMode.Max,
OutputFormat = OutputFormat.Jpeg,
JpegQuality = 85
};
ImageBuilder.Current.Build(new ImageJob(image, outputStream2, instructions2));
outputStream2.Seek(0, SeekOrigin.Begin);
imageMedium.Properties.ContentType = "image/jpeg";
imageMedium.UploadFromStream(outputStream2);
}
Итак, в данный момент выполняется загрузка изображения, первый шаг - изменение размера до небольшого размера, но затем -код для изменения размера до среднего, он выдает ошибку Error: my-vehicle-image.jpg Parameter is not valid.
Так что я подозреваю, что мой оригинальный Stream image
закрывается?или утилизировать, так что когда я пытаюсь использовать ImageBuilder.Current.Build(new ImageJob(image, outputStream2, instructions2));
, это недопустимо?
Надеюсь, это легко исправить.Моя альтернатива, и она работает, состоит в том, чтобы иметь 2 функции, одна из которых изменяет размер маленькой, а другая - большого.