/// <summary> /// Post processes the image asynchronously. /// </summary> /// <param name="stream">The source image stream.</param> /// <param name="extension">The image extension.</param> /// <returns> /// The <see cref="Task"/>. /// </returns> public static async Task <MemoryStream> PostProcessImageAsync(MemoryStream stream, string extension) { // Create a source temporary file with the correct extension. long length = stream.Length; string tempFile = Path.GetTempFileName(); string sourceFile = Path.ChangeExtension(tempFile, extension); File.Move(tempFile, sourceFile); // Save the input stream to a temp file for post processing. using (FileStream fileStream = File.Create(sourceFile)) { await stream.CopyToAsync(fileStream); } PostProcessingResultEventArgs result = await RunProcess(sourceFile, length); if (result != null && result.Saving > 0) { using (FileStream fileStream = File.OpenRead(sourceFile)) { // Replace stream contents. stream.SetLength(0); await fileStream.CopyToAsync(stream); } } // Cleanup File.Delete(sourceFile); stream.Position = 0; return(stream); }
/// <summary> /// Post processes the image asynchronously. /// </summary> /// <param name="sourceFile"> /// The source file. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> public static async Task PostProcessImageAsync(string sourceFile) { string targetFile = Path.GetTempFileName(); PostProcessingResultEventArgs result = await RunProcess(sourceFile, targetFile); if (result != null && result.Saving > 0 && result.ResultFileSize > 0) { File.Copy(result.ResultFileName, result.OriginalFileName, true); File.Delete(result.ResultFileName); } else { File.Delete(targetFile); } }