private async Task UploadResizedAsync(IFormFile file, string id, CancellationToken ct) { await using var assetResized = TempAssetFile.Create(file.ToAssetFile()); var resizeOptions = new ResizeOptions { TargetWidth = 128, TargetHeight = 128 }; try { await using (var originalStream = file.OpenReadStream()) { await using (var resizeStream = assetResized.OpenWrite()) { await assetThumbnailGenerator.CreateThumbnailAsync(originalStream, file.ContentType, resizeStream, resizeOptions, ct); } } } catch { throw new ValidationException(T.Get("validation.notAnImage")); } await using (var resizeStream = assetResized.OpenWrite()) { await userPictureStore.UploadAsync(id, resizeStream, ct); } }
public async Task EnhanceAsync(UploadAssetCommand command, HashSet <string>?tags) { if (command.Type == AssetType.Unknown || command.Type == AssetType.Image) { ImageInfo?imageInfo = null; using (var uploadStream = command.File.OpenRead()) { imageInfo = await assetThumbnailGenerator.GetImageInfoAsync(uploadStream); } if (imageInfo != null) { var isSwapped = imageInfo.IsRotatedOrSwapped; if (isSwapped) { var tempFile = new TempAssetFile(command.File); using (var uploadStream = command.File.OpenRead()) { imageInfo = await assetThumbnailGenerator.FixOrientationAsync(uploadStream, tempFile.Stream); } command.File.Dispose(); command.File = tempFile; } if (command.Type == AssetType.Unknown || isSwapped) { command.Type = AssetType.Image; command.Metadata.SetPixelWidth(imageInfo.PixelWidth); command.Metadata.SetPixelHeight(imageInfo.PixelHeight); } } } if (command.Type == AssetType.Image && tags != null) { tags.Add("image"); var wh = command.Metadata.GetPixelWidth() + command.Metadata.GetPixelWidth(); if (wh > 2000) { tags.Add("image/large"); } else if (wh > 1000) { tags.Add("image/medium"); } else { tags.Add("image/small"); } } }
public async Task EnhanceAsync(MetadataRequest request) { var file = request.File; if (request.Type != MediaType.Unknown) { return; } var mimeType = file.MimeType; ImageInfo?imageInfo = null; await using (var uploadStream = file.OpenRead()) { imageInfo = await assetThumbnailGenerator.GetImageInfoAsync(uploadStream, mimeType); } if (imageInfo != null) { var isSwapped = imageInfo.Orientation > ImageOrientation.TopLeft; if (isSwapped) { var tempFile = TempAssetFile.Create(file); await using (var uploadStream = file.OpenRead()) { await using (var tempStream = tempFile.OpenWrite()) { await assetThumbnailGenerator.FixOrientationAsync(uploadStream, mimeType, tempStream); } } await using (var tempStream = tempFile.OpenRead()) { imageInfo = await assetThumbnailGenerator.GetImageInfoAsync(tempStream, mimeType) ?? imageInfo; } await file.DisposeAsync(); request.File = tempFile; } } if (imageInfo != null) { request.Type = MediaType.Image; request.Metadata.SetPixelWidth(imageInfo.PixelWidth); request.Metadata.SetPixelHeight(imageInfo.PixelHeight); } }
private async Task ResizeAsync(string appId, MediaItem media, Stream target, string fileName, ResizeOptions resizeOptions, bool overwrite, CancellationToken ct) { #pragma warning disable MA0040 // Flow the cancellation token using var activity = Telemetry.Activities.StartActivity("Resize"); await using var assetOriginal = new TempAssetFile(media.FileName, media.MimeType, 0); await using var assetResized = new TempAssetFile(media.FileName, media.MimeType, 0); using (Telemetry.Activities.StartActivity("Read")) { await using (var originalStream = assetOriginal.OpenWrite()) { await mediaFileStore.DownloadAsync(appId, media, originalStream, default, ct);
private async Task ResizeAsync(string resizedAsset, string mimeType, Stream target, CancellationToken ct) { #pragma warning disable MA0040 // Flow the cancellation token using var activity = Telemetry.Activities.StartActivity("Resize"); await using var assetOriginal = new TempAssetFile(resizedAsset, mimeType, 0); await using var assetResized = new TempAssetFile(resizedAsset, mimeType, 0); var resizeOptions = new ResizeOptions { TargetWidth = 50, TargetHeight = 50 }; using (Telemetry.Activities.StartActivity("Read")) { await using (var originalStream = assetOriginal.OpenWrite()) { await appImageStore.DownloadAsync(App.Id, originalStream); } } using (Telemetry.Activities.StartActivity("Resize")) { try { await using (var originalStream = assetOriginal.OpenRead()) { await using (var resizeStream = assetResized.OpenWrite()) { await assetThumbnailGenerator.CreateThumbnailAsync(originalStream, mimeType, resizeStream, resizeOptions); } } } catch { await using (var originalStream = assetOriginal.OpenRead()) { await using (var resizeStream = assetResized.OpenWrite()) { await originalStream.CopyToAsync(resizeStream); } } } } using (Telemetry.Activities.StartActivity("Save")) { try { await using (var resizeStream = assetResized.OpenRead()) { await assetStore.UploadAsync(resizedAsset, resizeStream); } } catch (AssetAlreadyExistsException) { return; } } using (Telemetry.Activities.StartActivity("Write")) { await using (var resizeStream = assetResized.OpenRead()) { await resizeStream.CopyToAsync(target, ct); } } #pragma warning restore MA0040 // Flow the cancellation token }
private async Task ResizeAsync(IAssetEntity asset, string suffix, Stream target, ResizeOptions resizeOptions, bool overwrite, CancellationToken ct) { #pragma warning disable MA0040 // Flow the cancellation token using var activity = Telemetry.Activities.StartActivity("Resize"); await using var assetOriginal = new TempAssetFile(asset.FileName, asset.MimeType, 0); await using var assetResized = new TempAssetFile(asset.FileName, asset.MimeType, 0); using (Telemetry.Activities.StartActivity("Read")) { await using (var originalStream = assetOriginal.OpenWrite()) { await assetFileStore.DownloadAsync(asset.AppId.Id, asset.Id, asset.FileVersion, null, originalStream); } } using (Telemetry.Activities.StartActivity("Resize")) { try { await using (var originalStream = assetOriginal.OpenRead()) { await using (var resizeStream = assetResized.OpenWrite()) { await assetThumbnailGenerator.CreateThumbnailAsync(originalStream, asset.MimeType, resizeStream, resizeOptions); } } } catch { await using (var originalStream = assetOriginal.OpenRead()) { await using (var resizeStream = assetResized.OpenWrite()) { await originalStream.CopyToAsync(resizeStream); } } } } using (Telemetry.Activities.StartActivity("Save")) { try { await using (var resizeStream = assetResized.OpenRead()) { await assetFileStore.UploadAsync(asset.AppId.Id, asset.Id, asset.FileVersion, suffix, resizeStream, overwrite); } } catch (AssetAlreadyExistsException) { return; } } using (Telemetry.Activities.StartActivity("Write")) { await using (var resizeStream = assetResized.OpenRead()) { await resizeStream.CopyToAsync(target, ct); } } #pragma warning restore MA0040 // Flow the cancellation token }
public async Task EnhanceAsync(UploadAssetCommand command) { if (command.Type == AssetType.Unknown || command.Type == AssetType.Image) { var mimeType = command.File.MimeType; ImageInfo?imageInfo = null; await using (var uploadStream = command.File.OpenRead()) { imageInfo = await assetThumbnailGenerator.GetImageInfoAsync(uploadStream, mimeType); } if (imageInfo != null) { var isSwapped = imageInfo.Orientation > ImageOrientation.TopLeft; if (command.File != null && isSwapped) { var tempFile = TempAssetFile.Create(command.File); await using (var uploadStream = command.File.OpenRead()) { await using (var tempStream = tempFile.OpenWrite()) { await assetThumbnailGenerator.FixOrientationAsync(uploadStream, mimeType, tempStream); } } await using (var tempStream = tempFile.OpenRead()) { imageInfo = await assetThumbnailGenerator.GetImageInfoAsync(tempStream, mimeType) ?? imageInfo; } await command.File.DisposeAsync(); command.File = tempFile; } if (command.Type == AssetType.Unknown || isSwapped) { command.Type = AssetType.Image; command.Metadata.SetPixelWidth(imageInfo.PixelWidth); command.Metadata.SetPixelHeight(imageInfo.PixelHeight); } } } if (command.Tags == null) { return; } if (command.Type == AssetType.Image) { command.Tags.Add("image"); var wh = command.Metadata.GetPixelWidth() + command.Metadata.GetPixelWidth(); if (wh > 2000) { command.Tags.Add("image/large"); } else if (wh > 1000) { command.Tags.Add("image/medium"); } else { command.Tags.Add("image/small"); } } }