/// <summary> /// /// </summary> /// <param name="options"></param> /// <returns></returns> public async Task <string> ConcatenateAsync(ImageOptions options) { var fileName = options.ConcatenatedImageFileNameScheme.Invoke(this); var filePath = Path.Combine(options.ConcatenatedImageDirectory, fileName); var filePhysicalPath = Path.Combine(options.RootDirectory, filePath).Replace('/', Path.DirectorySeparatorChar); Path.GetDirectoryName(filePhysicalPath).CreateDirectory(); if (!File.Exists(filePhysicalPath)) { var fileAbsolutePaths = ImagePaths .Where(_ => !_.IsNullOrWhiteSpace()) .Select(_ => _.PreProcess(options.RootDirectory)) .ToList(); var fileImage = (await ImageHelper.FromFileOrNetworkAsync(fileAbsolutePaths[0]))?.Resize(Width, Height); foreach (var path in fileAbsolutePaths.Skip(1)) { using var image = await ImageHelper.FromFileOrNetworkAsync(path); if (image == null) { continue; } fileImage = fileImage.Concatenate(image.Resize(Width, Height)); } using (fileImage) fileImage.CompressSave(filePhysicalPath, options.CompressFlag, ImageFormat.Jpeg); } return(filePath); }
private void ImagePaths_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { if (ImagePaths.Count(i => !string.IsNullOrEmpty(i)) > 0) { if (ImagePaths.Count(i => !string.IsNullOrEmpty(i)) > _photosBase64Dictionary.Count) { var fileProvider = DependencyService.Get <IFileSystemWork>(); foreach ( var newPhotoPath in ImagePaths.Where(path => _photosBase64Dictionary.All(b64 => b64.Key != path))) { if (!newPhotoPath.Contains("http://185.76.145.214/") && !string.IsNullOrEmpty(newPhotoPath)) { var tempBase64Photo = Convert.ToBase64String(fileProvider.GetFile(newPhotoPath)); _photosBase64Dictionary.Add(newPhotoPath, tempBase64Photo); PhotosBase64Dictionary.Add(tempBase64Photo); } else if (!string.IsNullOrEmpty(newPhotoPath)) { _photosBase64Dictionary.Add(newPhotoPath, newPhotoPath); PhotosBase64Dictionary.Add(newPhotoPath); } } } else if (ImagePaths.Count(i => !string.IsNullOrEmpty(i)) < _photosBase64Dictionary.Count) { var tempToRemove = _photosBase64Dictionary.Where(b64 => !ImagePaths.Contains(b64.Key)) .Select(b64 => b64.Key); foreach (var itemToDelete in tempToRemove) { PhotosBase64Dictionary.Remove(_photosBase64Dictionary.First(i => i.Key == itemToDelete).Value); _photosBase64Dictionary.Remove(itemToDelete); } } } else { _photosBase64Dictionary.Clear(); PhotosBase64Dictionary.Clear(); } }