/// <inheritdoc /> Stream IFileProcessor.Process(FileProcessorInput fileInput) { if (fileInput == null) { throw new ArgumentException("fileInput cannot be null"); } Stream optimizedFileStream = this.Process(fileInput); return(optimizedFileStream); }
/// <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);