public async Task Process(ResizeMessage msg) { var thumbnailWidth = _options.ImageWidth; var inputContainer = GetInputContainer(msg); var outputContainer = GetOutputContainer(msg); var inputBlob = inputContainer.GetBlockBlobReference(msg.Image); var outputBlob = outputContainer.GetBlockBlobReference(msg.Image); var encoder = GetEncoder(msg.Image); if (null == encoder) { throw new NotSupportedException($"No encoder supported for {msg.Image}"); } using (var inputStream = new MemoryStream()) using (var outputStream = new MemoryStream()) { await inputBlob.DownloadToStreamAsync(inputStream); inputStream.Position = 0; using (var image = Image.Load(inputStream)) { var divisor = image.Width / thumbnailWidth; var height = Convert.ToInt32(Math.Round((decimal)(image.Height / divisor))); image.Mutate(x => x.Resize(thumbnailWidth, height)); image.Save(outputStream, encoder); outputStream.Position = 0; } await outputBlob.UploadFromStreamAsync(outputStream); } }
public static void Run([ServiceBusTrigger("thumbnails", Connection = "ServiceBusConnectionString")] ResizeMessage msg, ILogger log, ExecutionContext context) { _context = context; try { ServiceProvider.GetRequiredService <ImageProcessor>().Process(msg).GetAwaiter().GetResult(); } catch (Exception ex) { log.LogInformation(ex.Message); } log.LogInformation($"Function processed: {msg}"); }
private CloudBlobContainer GetOutputContainer(ResizeMessage msg) { var account = CloudStorageAccount.Parse(_options.StorageAccountConnectionString); var blobClient = account.CreateCloudBlobClient(); var container = blobClient.GetContainerReference(msg.ThumbnailContainer); if (!_outputContainerCreated) { lock (_mySyncRoot) { if (!_outputContainerCreated) { container.CreateIfNotExistsAsync(BlobContainerPublicAccessType.Blob, null, null).GetAwaiter().GetResult(); _outputContainerCreated = true; } } } return(container); }