Esempio n. 1
0
        private async Task <byte[]> ProcessAndPutToCacheAsync(CachedImageResult cachedImage, byte[] buffer, ProcessImageQuery query)
        {
            if (!query.NeedsProcessing())
            {
                await _imageCache.PutAsync(cachedImage, buffer);

                return(buffer);
            }
            else
            {
                var processQuery = new ProcessImageQuery(query)
                {
                    Source        = buffer,
                    Format        = query.Format ?? cachedImage.Extension,
                    FileName      = cachedImage.FileName,
                    DisposeSource = true
                };

                using (var result = _imageProcessor.ProcessImage(processQuery))
                {
                    var outBuffer = result.OutputStream.GetBuffer();
                    await _imageCache.PutAsync(cachedImage, outBuffer);

                    if (cachedImage.Extension != result.FileExtension)
                    {
                        cachedImage.Path      = Path.ChangeExtension(cachedImage.Path, result.FileExtension);
                        cachedImage.Extension = result.FileExtension;
                    }

                    Logger.DebugFormat($"Processed image '{cachedImage.FileName}' in {result.ProcessTimeMs} ms.", null);

                    return(outBuffer);
                }
            }
        }