/// <summary> /// Сохраняет изображение /// </summary> /// <param name="imagHelper"></param> public void SaveImages(ImageItemHelper[] imageHelpers) { foreach (var item in imageHelpers) { try { if (File.Exists(item.SavePath)) { File.Delete(item.SavePath); } using (Bitmap img = (Bitmap)Bitmap.FromFile(item.FullName)) { Bitmap _img, bg = null; if (String.IsNullOrWhiteSpace(item.Orientation)) { _img = Imaging.Resize(img, item.Width, item.Height); bg = DrawFilledRectangle(item.Width, item.Height); _img = Superimpose(bg, _img); } else { if (img.Width > img.Height) { _img = Imaging.Resize(img, item.Width, item.Orientation); if (_img.Height > item.Height) { _img = Imaging.Resize(img, item.Height, "height"); } } else { _img = Imaging.Resize(img, item.Height, "height"); if (_img.Width > item.Width) { _img = Imaging.Resize(img, item.Width, item.Orientation); } } } _img.Save(item.SavePath, CodecImageParams.CodecInfo, CodecImageParams.EncoderParams); _img.Dispose(); } } catch (Exception e) { SrvcLogger.Error("{error}", e.ToString()); } } }
/// <summary> /// Режет изображение под нужные размеры /// </summary> /// <param name="fi"></param> private void ResizingImages(FileInfo[] fi) { ImageCreator imageCreator = new ImageCreator(); foreach (var img in fi) { try { if (ParamsHelper.AllowedPicTypes.Contains(img.Extension.ToLower())) { imageCreator.SaveImages(GetImageHelpers(img)); } } catch (Exception e) { SrvcLogger.Error("{error}", e.ToString()); } } }
/// <summary> /// Разархивирование архива с изображениями /// </summary> /// <param name="archive"></param> private FileInfo[] ExtractArchive(FileInfo archive, string tempPath) { FileInfo[] result = null; try { SrvcLogger.Info("{work}", $"распаковка архива: {archive.Name}"); Importer.EmailBody += $"<p>распаковка архива: <b>{archive.Name}</b></p>"; ZipFile.ExtractToDirectory(archive.FullName, tempPath, Encoding.UTF8); DirectoryInfo di = new DirectoryInfo(tempPath); if (di != null) { if (di.GetDirectories().Count() > 0) { List <FileInfo> files = new List <FileInfo>(); foreach (var dir in di.GetDirectories()) { files.AddRange(dir.GetFiles()); } result = files.ToArray(); } else { result = di.GetFiles(); } } if (result != null) { SrvcLogger.Info("{work}", $"архив распакован, кол-во файлов: {result.Count()}"); } } catch (Exception e) { SrvcLogger.Error("{error}", e.ToString()); } return(result); }
/// <summary> /// Обрабатывает изображения /// </summary> public void Execute(FileInfo archive) { if (archive.Name.ToLower().Contains("certi")) { prefixFolder = @"Certificates\"; isImages = false; } string tempPath = $"{ParamsHelper.SaveDirName}{prefixFolder}temp\\"; if (Directory.Exists(tempPath)) { Directory.Delete(tempPath, true); } if (!Directory.Exists(tempPath)) { Directory.CreateDirectory(tempPath); } archive.CopyTo($"{tempPath}{archive.Name}"); var files = ExtractArchive(new FileInfo($"{tempPath}{archive.Name}"), tempPath); if (files != null && files.Count() > 0) { Importer.Log.Insert(0, $"Кол-во изображений в архиве: {files.Count()}"); Importer.EmailBody += $"<p>кол-во изображений в архиве <b>{archive.Name}</b>: {files.Count()}</p>"; ResizingImages(files); Importer.Step++; Importer.UpdateCurrentStep(); } else { SrvcLogger.Info("{work}", $"распаковка {archive.Name} не дала результатов"); Importer.EmailBody += $"<p>распаковка <b>{archive.Name}</b> не дала результатов</p>"; Importer.CountFalse++; } #region удаляет временную директорию if (Directory.Exists(tempPath)) { try { Directory.Delete(tempPath, true); SrvcLogger.Info("{work}", $"директория {tempPath} удалена"); } catch (IOException) { Directory.Delete(tempPath, true); SrvcLogger.Info("{work}", $"директория {tempPath} удалена"); } catch (UnauthorizedAccessException) { Directory.Delete(tempPath, true); SrvcLogger.Info("{work}", $"директория {tempPath} удалена"); } catch (Exception e) { SrvcLogger.Error("{error}", e.ToString()); } } #endregion }