private async Task UploadToAzure(Image dbImage, SKCodec codec, CloudBlobContainer container, int desiredWidth) { var ratio = (float)desiredWidth / (float)codec.Info.Width; var supportedScale = codec.GetScaledDimensions(ratio); SKEncodedImageFormat target = codec.EncodedFormat == SKEncodedImageFormat.Gif ? SKEncodedImageFormat.Gif : SKEncodedImageFormat.Png; var width = supportedScale.Width; var height = supportedScale.Height; var format = target.ToString(); var name = $"{dbImage.Slug}_{width}_{height}"; var blobRef = container.GetBlockBlobReference(name); var url = blobRef.StorageUri.PrimaryUri.ToString(); using (var resultBitmap = SKBitmap.Decode(codec)) using (var resizedBitmap = resultBitmap.Resize(new SKImageInfo(supportedScale.Width, supportedScale.Height), SKBitmapResizeMethod.Lanczos3)) using (var resultImage = SKImage.FromBitmap(resizedBitmap)) using (var imageStream = resultImage.Encode(target, 100).AsStream()) { using (var outputSTream = await blobRef.OpenWriteAsync()) { await imageStream.CopyToAsync(outputSTream); } } var data = new AzureAdapterMetadata(this.account.BlobEndpoint.ToString(), container.Name, name, url); await this.imageData.SetImageLinks(new ImageLink(dbImage.Id, null, width, height, format, ImageAdapter.AzureFile, data.ToString())); }
public Task <string> GetUrl(ImageLink link) { if (link.Adapter != ImageAdapter.AzureFile) { throw new NotImplementedException("Only azure storage is supproted"); } var meta = AzureAdapterMetadata.Parse(link.Metadata); return(Task.FromResult(meta.Url)); }