public static void ResizeFile(FileResizeItem item)
        {
            // Input file name:
            var inputfile = item.SourceFile.FullName;

            // Determine target file name:
            var targetFile = DetermineTargetFile(item.SourceFile, item.TargetFile, item.TargetWidth, item.TargetHeight);

            // Skip file if already exists:
            if (item.Overwrite == false && File.Exists(targetFile)) return;

            // Configure JPEG encoding:
            var jpegEncoder = GetCodecInfo(ImageFormat.Jpeg);
            var jpegEncoderParameters = new EncoderParameters(1);
            jpegEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Convert.ToInt64(item.Quality * 100));

            using (var image = new Bitmap(inputfile))
            {
                // Define new image sizes:
                var targetSize = new Size(item.TargetWidth, item.TargetHeight);
                var destinationImageSize = image.Size.Resize(targetSize, item.ResizeMode, item.OrientationMode);
                var destinationFileSize = destinationImageSize;
                var cropSize = new Size(0, 0);

                // Perform cropping:
                if (item.ResizeMode == ResizeMode.BoxFitsInCropped)
                {
                    destinationFileSize = targetSize;
                    cropSize = new Size((destinationImageSize.Width - destinationFileSize.Width) / 2, (destinationImageSize.Height - destinationFileSize.Height) / 2);
                }

                // Perform resizing:
                using (var result = ResizeImage(image, destinationFileSize.Width, destinationFileSize.Height, destinationImageSize.Width, destinationImageSize.Height, cropSize.Width, cropSize.Height))
                {
                    // Copy metadata if requested to keep:
                    if (item.KeepMetaData)
                    {
                        PropertyItem orientationProperty = null;
                        foreach (var prop in image.PropertyItems)
                        {
                            if (prop.Id == 0x112)
                            {
                                orientationProperty = prop;
                            }
                            result.SetPropertyItem(prop);
                        }

                        if (item.AutoRotate && orientationProperty != null && orientationProperty.Value[0] != 1)
                        {
                            result.RotateFlip(OrientationToFlipType(orientationProperty.Value[0]));
                            orientationProperty.Value[0] = 1;
                            result.SetPropertyItem(orientationProperty);
                        }
                    }

                    // Save image:
                    EnsurePathExists(new FileInfo(targetFile).Directory);
                    result.Save(targetFile, jpegEncoder, jpegEncoderParameters);
                }
            }
        }
Beispiel #2
0
        public static void ResizeFile(FileResizeItem item)
        {
            // Input file name:
            var inputfile = item.SourceFile.FullName;

            // Determine target file name:
            var targetFile = DetermineTargetFile(item.SourceFile, item.TargetFile, item.TargetWidth, item.TargetHeight);

            // Skip file if already exists:
            if (item.Overwrite == false && File.Exists(targetFile))
            {
                return;
            }

            // Configure JPEG encoding:
            var jpegEncoder           = GetCodecInfo(ImageFormat.Jpeg);
            var jpegEncoderParameters = new EncoderParameters(1);

            jpegEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Convert.ToInt64(item.Quality * 100));

            using (var image = new Bitmap(inputfile))
            {
                // Define new image sizes:
                var targetSize           = new Size(item.TargetWidth, item.TargetHeight);
                var destinationImageSize = image.Size.Resize(targetSize, item.ResizeMode, item.OrientationMode);
                var destinationFileSize  = destinationImageSize;
                var cropSize             = new Size(0, 0);

                // Perform cropping:
                if (item.ResizeMode == ResizeMode.BoxFitsInCropped)
                {
                    destinationFileSize = targetSize;
                    cropSize            = new Size((destinationImageSize.Width - destinationFileSize.Width) / 2, (destinationImageSize.Height - destinationFileSize.Height) / 2);
                }

                // Perform resizing:
                using (var result = ResizeImage(image, destinationFileSize.Width, destinationFileSize.Height, destinationImageSize.Width, destinationImageSize.Height, cropSize.Width, cropSize.Height))
                {
                    // Copy metadata if requested to keep:
                    if (item.KeepMetaData)
                    {
                        PropertyItem orientationProperty = null;
                        foreach (var prop in image.PropertyItems)
                        {
                            if (prop.Id == 0x112)
                            {
                                orientationProperty = prop;
                            }
                            result.SetPropertyItem(prop);
                        }

                        if (item.AutoRotate && orientationProperty != null && orientationProperty.Value[0] != 1)
                        {
                            result.RotateFlip(OrientationToFlipType(orientationProperty.Value[0]));
                            orientationProperty.Value[0] = 1;
                            result.SetPropertyItem(orientationProperty);
                        }
                    }

                    // Save image:
                    EnsurePathExists(new FileInfo(targetFile).Directory);
                    result.Save(targetFile, jpegEncoder, jpegEncoderParameters);
                }
            }
        }
 public void Enqueue(FileResizeItem item)
 {
     this.ImageQueue.Enqueue(item);
 }
Beispiel #4
0
 public void Enqueue(FileResizeItem item)
 {
     this.ImageQueue.Enqueue(item);
 }