/// <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);
        }
Example #2
0
        /// <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);
            }
        }