/// <inheritdoc />
        Stream IFileProcessor.Process(FileProcessorInput fileInput)
        {
            if (fileInput == null)
            {
                throw new ArgumentException("fileInput cannot be null");
            }

            Stream optimizedFileStream = this.Process(fileInput);

            return(optimizedFileStream);
        }
Пример #2
0
        /// <inheritdoc />
        public override Stream Process(FileProcessorInput fileInput)
        {
            if (fileInput == null)
            {
                throw new ArgumentException("fileInput cannot be null");
            }

            byte[] imageBytes = this.GetByteArray(fileInput.FileStream);
            string imageName  = Guid.NewGuid().ToString();

            OptimizeUploadWaitRequest optimizeUploadWaitRequest = new OptimizeUploadWaitRequest();

            optimizeUploadWaitRequest.Lossy = this.lossyCompression;

            if (this.preserveMetadata)
            {
                optimizeUploadWaitRequest.PreserveMeta = new PreserveMeta[] { PreserveMeta.Profile, PreserveMeta.Geotag, PreserveMeta.Date, PreserveMeta.Copyright, PreserveMeta.Orientation };
            }

            optimizeUploadWaitRequest.WebP = this.webpCompression;

            using (var timeoutCancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(timeoutDurationInSeconds)))
            {
                try
                {
                    IApiResponse <OptimizeWaitResult> response = this.client.OptimizeWait(imageBytes, imageName, optimizeUploadWaitRequest, timeoutCancellationTokenSource.Token).Result;

                    if (!response.Success || response.StatusCode != HttpStatusCode.OK)
                    {
                        return(fileInput.FileStream);
                    }

                    Stream stream = this.GetImageStream(response.Body.KrakedUrl);

                    if (this.webpCompression)
                    {
                        fileInput.FileExtension = ".webp";
                        fileInput.MimeType      = "image/webp";
                    }

                    return(stream);
                }
                catch (TaskCanceledException)
                {
                    Log.Write("Image optimization has timed out. Default image stream was returned.", ConfigurationPolicy.ErrorLog);
                    return(fileInput.FileStream);
                }
                catch (Exception ex)
                {
                    Log.Write(ex, ConfigurationPolicy.ErrorLog);
                    return(fileInput.FileStream);
                }
            }
        }
        /// <inheritdoc />
        public virtual bool CanProcessFile(FileProcessorInput fileInput)
        {
            var  disableImageOptimizationAppSetting = System.Configuration.ConfigurationManager.AppSettings[ImageOptimizationConstants.DisableImageOptimizationAppSettingKey];
            bool disableImageOptimization;

            if (bool.TryParse(disableImageOptimizationAppSetting, out disableImageOptimization) && disableImageOptimization)
            {
                return(false);
            }

            if (!this.hasInitialized || fileInput == null)
            {
                return(false);
            }

            if (!this.supportedExtensions.Contains(fileInput.FileExtension))
            {
                return(false);
            }

            return(true);
        }
        public override Stream Process(FileProcessorInput fileInput)
        {
            using (var timeoutCancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(timeoutDurationInSeconds)))
            {
                try
                {
                    if (fileInput == null)
                    {
                        throw new ArgumentException("fileInput cannot be null");
                    }

                    byte[] imageBytes = this.GetByteArray(fileInput.FileStream);

                    var sourceData = Tinify.FromBuffer(imageBytes);

                    if (this.preserveMetadata)
                    {
                        sourceData.Preserve(this.MetadataKeys);
                    }

                    var resultData = sourceData.ToBuffer().ContinueWith(t => t.GetAwaiter().GetResult(), timeoutCancellationTokenSource.Token).Result;

                    Stream stream = new MemoryStream(resultData);

                    return(stream);
                }
                catch (TaskCanceledException)
                {
                    Log.Write("Image optimization has timed out. Default image stream was returned.", ConfigurationPolicy.ErrorLog);
                    return(fileInput.FileStream);
                }
                catch (Exception ex)
                {
                    Log.Write(ex, ConfigurationPolicy.ErrorLog);
                    return(fileInput.FileStream);
                }
            }
        }
 /// <summary>
 /// Process the input file
 /// </summary>
 /// <param name="fileInput">The input file data and info.</param>
 /// <returns>Processed file output stream</returns>
 public abstract Stream Process(FileProcessorInput fileInput);