Пример #1
0
        private void ResolveAlbumCoverUrl(GetAlbumModel album)
        {
            if (string.IsNullOrEmpty(album.CoverPhotoFileName))
            {
                return;
            }

            // Assume we're using the "small" size for now
            var coverPhotoPath = _filePathHelper.ResolveFilePath(album.Id, album.CoverPhotoFileName, "small");

            album.CoverPhotoUrl = _fileService.ResolveFileUrl(coverPhotoPath);
        }
Пример #2
0
        public async Task <string> SavePhotoFileAsync(int albumId, byte[] imageBytes, string origFileName, string contentType, bool resize = true)
        {
            var extension = Path.GetExtension(origFileName);

            var saveFileName = $"{Guid.NewGuid()}{extension}";

            _logger.LogDebug($"Saving photo to album ID {albumId}");

            // Save the original [renamed] file
            using (var stream = new MemoryStream(imageBytes))
            {
                var fileName = _filePathHelper.ResolveFilePath(albumId, saveFileName);
                await _fileService.SaveFileAsync(fileName, contentType, stream);

                _logger.LogDebug($"Saved original file to {fileName}");
            }

            if (resize)
            {
                foreach (var sizeProfile in _imageConfig.SizeProfiles)
                {
                    using (var stream = new MemoryStream(imageBytes))
                    {
                        IImageFormat imageFormat;
                        using (var image = Image.Load(stream, out imageFormat))
                        {
                            var filePath = _filePathHelper.ResolveFilePath(albumId, saveFileName, sizeProfile.Key);

                            using (var outStream = new MemoryStream())
                            {
                                image.Mutate(x => x.Resize(new ResizeOptions
                                {
                                    Mode     = ResizeMode.Crop, // TODO: allow each profile to specify method used
                                    Position = AnchorPositionMode.Center,
                                    Size     = new Size(sizeProfile.Width, sizeProfile.Height)
                                })
                                             .AutoOrient());
                                image.Save(outStream, imageFormat);

                                await _fileService.SaveFileAsync(filePath, contentType, outStream);
                            }
                        }
                    }
                }
            }

            return(saveFileName);
        }