Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public FileIndexItem ReadExifAndXmpFromFile(string subPath, ExtensionRolesHelper.ImageFormat imageFormat)
 {
     return(new FileIndexItem
     {
         Status = FileIndexItem.ExifStatus.Ok,
         Tags = "test",
         FileHash = "test",
         FileName = "t",
         ParentDirectory = "d"
     });
 }
Exemplo n.º 3
0
        /// <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));
        }
Exemplo n.º 4
0
 /// <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());
 }
Exemplo n.º 5
0
        /// <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,
            });
        }
Exemplo n.º 6
0
        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);
        }