コード例 #1
0
        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);
                }
        }
コード例 #2
0
ファイル: ImageResizer.cs プロジェクト: frankenh/trainingdays
        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}");
        }
コード例 #3
0
        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);
        }