示例#1
0
        public static void GetFilesAndSaveResized(string sourceDirectory, string destinationDirectory)
        {
            // Check if source directory exists
            if (!Directory.Exists(sourceDirectory))
            {
                throw new Exception($"SourceImageLocation {sourceDirectory} does not exist");
            }

            // Create directory if needed
            if (!Directory.Exists(destinationDirectory))
            {
                Console.WriteLine($"Creating destination directory {destinationDirectory}");
                Directory.CreateDirectory(destinationDirectory);
            }

            var filesToCopy = Directory.GetFiles(sourceDirectory, "*.jpg")
                              .Select(item => ImageFileDetails.CreateImageFileDetails(item))
                              .ToList();

            filesToCopy.RemoveAll(item => item == null);

            // Sort the files so that renaming with index is possible
            filesToCopy = filesToCopy.OrderBy(item => item.DateTimeTaken).ToList();

            Console.WriteLine($"Total files in source directory {sourceDirectory}: {filesToCopy.Count}");

            var index     = 0;
            var stopwatch = Stopwatch.StartNew();

            foreach (var fileToCopy in filesToCopy)
            {
                stopwatch.Restart();

                var  localFileName         = $"image_{index++.ToString("D4")}.jpg";
                var  destinationPath       = Path.Combine(destinationDirectory, localFileName);
                long downloadTimeInSeconds = 0;

                if (File.Exists(destinationPath))
                {
                    Console.WriteLine($"File {fileToCopy.FileName} already exists in save directory {destinationPath}");
                    continue;
                }

                // Load the image and save a resized version
                using (var image = Image.Load(fileToCopy.Path))
                {
                    downloadTimeInSeconds = stopwatch.ElapsedMilliseconds;
                    image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2));
                    image.Save(destinationPath);
                }

                var info = $"Finished copying and resizing file: {fileToCopy.FileName}. File {index}/{filesToCopy.Count}. Statistics {downloadTimeInSeconds} - {stopwatch.ElapsedMilliseconds}";
                Console.WriteLine(info);
            }
        }
示例#2
0
        public async Task GetEveryHourFile(string sourceDirectory)
        {
            var saveDir = "Files/EveryHour";

            if (!Directory.Exists(saveDir))
            {
                Directory.CreateDirectory(saveDir);
            }

            var fileGroups = Directory.GetFiles(sourceDirectory, "*.jpg", SearchOption.AllDirectories)
                             .Select(item => ImageFileDetails.CreateImageFileDetails(item))
                             .Where(item => item != null)
                             .GroupBy(item => item.DateTimeTaken.Hour)
                             .ToList();

            foreach (var fileGroup in fileGroups)
            {
                var hour    = fileGroup.Key;
                var picture = fileGroup.OrderBy(item => item.DateTimeTaken).First();
            }
        }
        public static async Task Execute(AppSettings appSettings, string workingDirectory)
        {
            var fileGroup = Directory.GetFiles(workingDirectory, "*.jpg", SearchOption.AllDirectories)
                            .Select(item => ImageFileDetails.CreateImageFileDetails(item))
                            .Where(item => item != null)
                            .GroupBy(item => item.DateTimeTaken.Date)
                            .ToList();

            foreach (var files in fileGroup)
            {
                var fileAfter = files
                                .OrderBy(item => item.DateTimeTaken)
                                .FirstOrDefault(item => item.DateTimeTaken.Hour >= 14);

                var fileBefore = files
                                 .OrderByDescending(item => item.DateTimeTaken)
                                 .FirstOrDefault(item => item.DateTimeTaken.Hour < 14);

                ImageFileDetails saveFile = null;
                if ((fileAfter?.DateTimeTaken.Hour ?? 23) - 14 <= 14 - (fileBefore?.DateTimeTaken.Hour ?? 0))
                {
                    saveFile = fileAfter;
                }

                if ((fileAfter?.DateTimeTaken.Hour ?? 23) - 14 >= 14 - (fileBefore?.DateTimeTaken.Hour ?? 0))
                {
                    saveFile = fileBefore;
                }

                if (saveFile == null && fileBefore != null)
                {
                    saveFile = fileBefore;
                }

                if (saveFile == null)
                {
                    return;
                }

                Console.WriteLine($"Hour1400 file: {saveFile.Path}");

                try
                {
                    using (var client = new Services.UplivingAPI {
                        BaseUri = new Uri(appSettings.ServiceApiLocation)
                    })
                    {
                        var fileName = $"{saveFile.DateTimeTaken.ToString("yyyy-MM-ddTHHmmss")}.jpg";

                        var uploadResponse = await client.Hour1400UploadWithHttpMessagesAsync(new Services.Models.Hour1400UploadRequest
                        {
                            Secret   = appSettings.Hour1400UploadSecret,
                            Bytes    = await File.ReadAllBytesAsync(saveFile.Path),
                            FileName = fileName
                        });
                    }
                }
                catch (Exception excep)
                {
                    Console.Error.WriteLine(excep.Message);
                }
            }
        }
        public async Task Get1400HourFile(string sourceDirectory)
        {
            var saveDir = "Files/Hour1400";

            if (!Directory.Exists(saveDir))
            {
                Directory.CreateDirectory(saveDir);
            }

            var fileGroup = Directory.GetFiles(sourceDirectory, "*.jpg", SearchOption.AllDirectories)
                            .Select(item => ImageFileDetails.CreateImageFileDetails(item))
                            .Where(item => item != null)
                            .GroupBy(item => item.DateTimeTaken.Date)
                            .ToList();

            foreach (var files in fileGroup)
            {
                var fileAfter = files
                                .OrderBy(item => item.DateTimeTaken)
                                .FirstOrDefault(item => item.DateTimeTaken.Hour >= 14);

                var fileBefore = files
                                 .OrderByDescending(item => item.DateTimeTaken)
                                 .FirstOrDefault(item => item.DateTimeTaken.Hour < 14);

                ImageFileDetails saveFile = null;
                if ((fileAfter?.DateTimeTaken.Hour ?? 23) - 14 <= 14 - (fileBefore?.DateTimeTaken.Hour ?? 0))
                {
                    saveFile = fileAfter;
                }

                if ((fileAfter?.DateTimeTaken.Hour ?? 23) - 14 >= 14 - (fileBefore?.DateTimeTaken.Hour ?? 0))
                {
                    saveFile = fileBefore;
                }

                if (saveFile == null && fileBefore != null)
                {
                    saveFile = fileBefore;
                }

                if (saveFile == null)
                {
                    continue;
                }

                Console.WriteLine($"Hour1400 file: {saveFile.Path}");

                try
                {
                    using (var client = new TimelapseMP4Webpage
                    {
                        BaseUri = new Uri(_appSettings.ServiceApiLocation)
                    })
                    {
                        // Load the image and save a resized version
                        using (var image = Image.Load(saveFile.Path))
                        {
                            var fileName = $"{saveFile.DateTimeTaken.ToString("yyyy-MM-ddTHHmmss")}.jpg";
                            image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2));
                            image.Save($"{saveDir}/{fileName}");

                            var uploadResponse = await client.ApiHour1400UploadPostAsync(new Services.Models.Hour1400UploadRequest
                            {
                                FileName = fileName,
                                Secret   = _appSettings.Hour1400UploadSecret,
                                Bytes    = File.ReadAllBytes($"{saveDir}/{fileName}")
                            });
                        }

                        // Load the image and save a thumbnail
                        using (var image = Image.Load(saveFile.Path))
                        {
                            var     height     = 200;
                            decimal widthRatio = image.Height / height;
                            int     width      = (int)Math.Round(image.Width / widthRatio, 0);
                            var     fileName   = $"{saveFile.DateTimeTaken.ToString("yyyy-MM-ddTHHmmss")}_thumb.jpg";

                            image.Mutate(x => x.Resize(width, height));
                            image.Save($"{saveDir}/{fileName}");

                            var uploadResponse = await client.ApiHour1400UploadPostAsync(new Services.Models.Hour1400UploadRequest
                            {
                                FileName = fileName,
                                Secret   = _appSettings.Hour1400UploadSecret,
                                Bytes    = File.ReadAllBytes($"{saveDir}/{fileName}")
                            });
                        }
                    }
                }
                catch (Exception excep)
                {
                    Console.WriteLine(excep.Message);
                }
            }
        }