private ImportIndexItem ObjectCreateIndexItem( string inputFileFullPath, ExtensionRolesHelper.ImageFormat imageFormat, string fileHashCode, FileIndexItem fileIndexItem, int colorClassTransformation, long size) { var importIndexItem = new ImportIndexItem(_appSettings) { SourceFullFilePath = inputFileFullPath, DateTime = fileIndexItem.DateTime, FileHash = fileHashCode, FileIndexItem = fileIndexItem, Status = ImportStatus.Ok, FilePath = fileIndexItem.FilePath, ColorClass = fileIndexItem.ColorClass }; // used for files without a Exif Date for example WhatsApp images if (fileIndexItem.DateTime.Year == 1) { importIndexItem.FileIndexItem.DateTime = importIndexItem.ParseDateTimeFromFileName(); // used to sync exifTool and to let the user know that the transformation has been applied importIndexItem.FileIndexItem.Description = MessageDateTimeBasedOnFilename; // only set when date is parsed if not ignore update if (importIndexItem.FileIndexItem.DateTime.Year != 1) { importIndexItem.DateTimeFromFileName = true; } } // Also add Camera brand to list importIndexItem.MakeModel = importIndexItem.FileIndexItem.MakeModel; // AddToDatabase is Used by the importer History agent importIndexItem.FileIndexItem.AddToDatabase = DateTime.UtcNow; importIndexItem.AddToDatabase = DateTime.UtcNow; importIndexItem.FileIndexItem.Size = size; importIndexItem.FileIndexItem.FileHash = fileHashCode; importIndexItem.FileIndexItem.ImageFormat = imageFormat; importIndexItem.FileIndexItem.Status = FileIndexItem.ExifStatus.Ok; if (colorClassTransformation < 0) { return(importIndexItem); } // only when set in ImportSettingsModel var colorClass = (ColorClassParser.Color)colorClassTransformation; importIndexItem.FileIndexItem.ColorClass = colorClass; importIndexItem.ColorClass = colorClass; return(importIndexItem); }
public FileIndexItem ReadExifAndXmpFromFile(string subPath, ExtensionRolesHelper.ImageFormat imageFormat) { return(new FileIndexItem { Status = FileIndexItem.ExifStatus.Ok, Tags = "test", FileHash = "test", FileName = "t", ParentDirectory = "d" }); }
/// <summary> /// Used in ResizeThumbnailToStream to save based on the input settings /// </summary> /// <param name="image">Rgba32 image</param> /// <param name="imageFormat">Files ImageFormat</param> /// <param name="outputStream">input stream to save</param> internal Task SaveThumbnailImageFormat(Image image, ExtensionRolesHelper.ImageFormat imageFormat, MemoryStream outputStream) { if (outputStream == null) { throw new ArgumentNullException(nameof(outputStream)); } return(SaveThumbnailImageFormatInternal(image, imageFormat, outputStream)); }
/// <summary> /// Compare imageFormat type /// </summary> /// <param name="propertyName">name of property e.g. ImageFormat</param> /// <param name="sourceIndexItem">source object</param> /// <param name="oldImageFormatValue">two values to compare with</param> /// <param name="newImageFormatValue">two values to compare with</param> /// <param name="differenceList">lisf of dif</param> private static void CompareImageFormat(string propertyName, FileIndexItem sourceIndexItem, ExtensionRolesHelper.ImageFormat oldImageFormatValue, ExtensionRolesHelper.ImageFormat newImageFormatValue, List <string> differenceList) { if (oldImageFormatValue == newImageFormatValue || newImageFormatValue == ExtensionRolesHelper.ImageFormat.unknown) { return; } sourceIndexItem.GetType().GetProperty(propertyName).SetValue(sourceIndexItem, newImageFormatValue, null); differenceList.Add(propertyName.ToLowerInvariant()); }
/// <summary> /// Private: use => SaveThumbnailImageFormat /// Used in ResizeThumbnailToStream to save based on the input settings /// </summary> /// <param name="image">Rgba32 image</param> /// <param name="imageFormat">Files ImageFormat</param> /// <param name="outputStream">input stream to save</param> private async Task SaveThumbnailImageFormatInternal(Image image, ExtensionRolesHelper.ImageFormat imageFormat, MemoryStream outputStream) { if (imageFormat == ExtensionRolesHelper.ImageFormat.png) { await image.SaveAsync(outputStream, new PngEncoder { ColorType = PngColorType.Rgb, CompressionLevel = PngCompressionLevel.BestSpeed, IgnoreMetadata = true, TransparentColorMode = PngTransparentColorMode.Clear, }); return; } await image.SaveAsync(outputStream, new JpegEncoder { Quality = 90, }); }
public async Task <MemoryStream> ResizeThumbnailFromThumbnailImage(string fileHash, int width, string thumbnailOutputHash = null, bool removeExif = false, ExtensionRolesHelper.ImageFormat imageFormat = ExtensionRolesHelper.ImageFormat.jpg) { var outputStream = new MemoryStream(); try { // resize the image and save it to the output stream using (var inputStream = _thumbnailStorage.ReadStream(fileHash)) using (var image = await Image.LoadAsync(inputStream)) { ImageSharpImageResize(image, width, removeExif); await SaveThumbnailImageFormat(image, imageFormat, outputStream); // When thumbnailOutputHash is nothing return stream instead of writing down if (string.IsNullOrEmpty(thumbnailOutputHash)) { return(outputStream); } // only when a hash exists await _thumbnailStorage.WriteStreamAsync(outputStream, thumbnailOutputHash); // Disposed in WriteStreamAsync } } catch (Exception ex) { var message = ex.Message; if (message.StartsWith("Image cannot be loaded")) { message = "Image cannot be loaded"; } _logger.LogError($"[ResizeThumbnailFromThumbnailImage] Exception {fileHash} {message}", ex); return(null); } return(outputStream); }