public CropTransformViewModel(ValuePairEnumerator config) { _config = config; }
public string ExecuteThread(FileItem item, string infile, string dest, ValuePairEnumerator configData) { var conf = new OverlayTransformViewModel(configData); using (MagickImage image = new MagickImage(infile)) { Gravity gravity = Gravity.Center; if (conf.A11) { gravity = Gravity.Northwest; } if (conf.A12) { gravity = Gravity.North; } if (conf.A13) { gravity = Gravity.Northeast; } if (conf.A21) { gravity = Gravity.West; } if (conf.A22) { gravity = Gravity.Center; } if (conf.A23) { gravity = Gravity.East; } if (conf.A31) { gravity = Gravity.Southwest; } if (conf.A32) { gravity = Gravity.South; } if (conf.A33) { gravity = Gravity.Southeast; } if (File.Exists(conf.OverlayFile)) { // Read the watermark that will be put on top of the image using (MagickImage watermark = new MagickImage(conf.OverlayFile)) { if (conf.StrechOverlay) { watermark.Resize(image.Width, image.Height); } // Optionally make the watermark more transparent watermark.Evaluate(Channels.Alpha, EvaluateOperator.Add, -(255 * (100 - conf.Transparency) / 100)); // Draw the watermark in the bottom right corner image.Composite(watermark, gravity, CompositeOperator.Over); //// Optionally make the watermark more transparent //watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 4); //// Or draw the watermark at a specific location //image.Composite(watermark, 200, 50, CompositeOperator.Over); } } string text = ""; if (!string.IsNullOrEmpty(conf.Text)) { Regex regPattern = new Regex(@"\[(.*?)\]", RegexOptions.Singleline); MatchCollection matchX = regPattern.Matches(conf.Text); text = matchX.Cast <Match>() .Aggregate(conf.Text, (current1, match) => item.FileNameTemplates.Where( template => String.Compare(template.Name, match.Value, StringComparison.InvariantCultureIgnoreCase) == 0).Aggregate(current1, (current, template) => current.Replace(match.Value, template.Value))); image.Font = conf.Font; image.FontPointsize = conf.FontSize; Color color = (Color)ColorConverter.ConvertFromString(conf.FontColor); image.FillColor = new MagickColor(color.R, color.G, color.B, color.A); image.StrokeColor = new MagickColor(color.R, color.G, color.B, color.A); image.Annotate(text, gravity); } image.Format = MagickFormat.Jpeg; image.Write(dest); } return(dest); }
public TransformPluginItem(ValuePairEnumerator config) { _config = config; }
public OverlayTransformViewModel(ValuePairEnumerator config) { _config = config; BrowseCommand = new RelayCommand(Browse); }
public UserControl GetConfig(ValuePairEnumerator configData) { return(null); }
public string Execute(FileItem fileItem, string dest, ValuePairEnumerator configData) { var conf = new ResizeTransformViewModel(configData); bool deleteFile = false; var filename = fileItem.FileName; if (fileItem.IsRaw) { string s = Path.Combine(Path.GetDirectoryName(fileItem.FileName), Path.GetFileNameWithoutExtension(fileItem.FileName) + ".jpg"); if (File.Exists(s)) { filename = s; } else { string dcraw_exe = Path.Combine(Settings.ApplicationFolder, "dcraw.exe"); if (File.Exists(dcraw_exe)) { PhotoUtils.RunAndWait(dcraw_exe, string.Format(" -e {0}", fileItem.FileName)); string thumb = Path.Combine(Path.GetDirectoryName(fileItem.FileName), Path.GetFileNameWithoutExtension(fileItem.FileName) + ".thumb.jpg"); if (File.Exists(thumb)) { deleteFile = true; filename = thumb; } } } dest = Path.Combine(Path.GetDirectoryName(dest), Path.GetFileNameWithoutExtension(dest) + ".jpg"); } using (MemoryStream fileStream = new MemoryStream(File.ReadAllBytes(filename))) { BitmapDecoder bmpDec = BitmapDecoder.Create(fileStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad); WriteableBitmap writeableBitmap; if (conf.KeepAspect) { double dw = (double)conf.Width / bmpDec.Frames[0].PixelWidth; writeableBitmap = BitmapFactory.ConvertToPbgra32Format(BitmapLoader.GetBitmapFrame(bmpDec.Frames[0], (int)(bmpDec.Frames[0].PixelWidth * dw), (int)(bmpDec.Frames[0].PixelHeight * dw), BitmapScalingMode.Linear)); } else { writeableBitmap = BitmapFactory.ConvertToPbgra32Format(BitmapLoader.GetBitmapFrame(bmpDec.Frames[0], conf.Width, conf.Height, BitmapScalingMode.Linear)); } BitmapLoader.Save2Jpg(writeableBitmap, dest); // remove temporally file created by dcraw if (deleteFile) { File.Delete(filename); } } return(dest); }
public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { return(ExecuteThread(item, infile, dest, configData)); }
public EffectViewModel(ValuePairEnumerator config) { _config = config; Effects = new ObservableCollection <EffectType>(); Effects.Add(new EffectType() { Name = "Sepia", Name1 = "Threshold", Min1 = 0, Max1 = 99, Default1 = 80, Param1Visible = true }); Effects.Add(new EffectType() { Name = "Oil Paint", Name1 = "Radius", Min1 = 3, Max1 = 35, Default1 = 15, Param1Visible = true }); Effects.Add(new EffectType() { Name = "Sketch", Name1 = "Sigma", Min1 = 1, Max1 = 99, Default1 = 20, Param1Visible = false, Name2 = "Angle", Min2 = 0, Max2 = 359, Default2 = 135, Param2Visible = false }); Effects.Add(new EffectType() { Name = "Charcoal", }); Effects.Add(new EffectType() { Name = "Solarize", Name1 = "Threshold of the intensity", Min1 = 0, Max1 = 99, Default1 = 10, Param1Visible = false }); Effects.Add(new EffectType() { Name = "Swirl", Name1 = "Degrees", Min1 = 0, Max1 = 359, Default1 = 45, Param1Visible = true }); Effects.Add(new EffectType() { Name = "Wave", Name1 = "Amplitude", Min1 = 1, Max1 = 99, Default1 = 30, Param1Visible = true, Name2 = "Wave length", Min2 = 0, Max2 = 365, Default2 = 135, Param2Visible = true }); Effects.Add(new EffectType() { Name = "BlueShift", }); Effects.Add(new EffectType() { Name = "Radial Blur", Name1 = "Degrees", Min1 = 0, Max1 = 100, Default1 = 10, Param1Visible = true }); Effects.Add(new EffectType() { Name = "Raise", Name1 = "Degrees", Min1 = -200, Max1 = +200, Default1 = 20, Param1Visible = true }); Effects.Add(new EffectType() { Name = "Negate", }); Effects.Add(new EffectType() { Name = "Grayscale", }); _selectedEffect = Effects[SelectedMode]; }
public string ExecuteThread(FileItem item, string dest, ValuePairEnumerator configData) { var conf = new OverlayTransformViewModel(configData); using (var fileStream = new MemoryStream(File.ReadAllBytes(item.FileName))) { BitmapDecoder bmpDec = BitmapDecoder.Create(fileStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad); WriteableBitmap writeableBitmap = BitmapFactory.ConvertToPbgra32Format(bmpDec.Frames[0]); Grid grid = new Grid { Width = writeableBitmap.PixelWidth, Height = writeableBitmap.PixelHeight, ClipToBounds = true, SnapsToDevicePixels = true }; grid.UpdateLayout(); var size = new Size(writeableBitmap.PixelWidth, writeableBitmap.PixelWidth); grid.Measure(size); grid.Arrange(new Rect(size)); Image image = new Image { Width = writeableBitmap.PixelWidth, Height = writeableBitmap.PixelHeight }; image.BeginInit(); image.Source = writeableBitmap; image.EndInit(); image.Stretch = Stretch.Fill; grid.Children.Add(image); grid.UpdateLayout(); Regex regPattern = new Regex(@"\[(.*?)\]", RegexOptions.Singleline); MatchCollection matchX = regPattern.Matches(conf.Text); var text = matchX.Cast <Match>().Aggregate(conf.Text, (current1, match) => item.FileNameTemplates.Where(template => System.String.Compare(template.Name, match.Value, System.StringComparison.InvariantCultureIgnoreCase) == 0).Aggregate(current1, (current, template) => current.Replace(match.Value, template.Value))); TextBlock textBlock = new TextBlock { Text = text, Foreground = (SolidColorBrush) new BrushConverter().ConvertFromString(conf.FontColor), FontFamily = (FontFamily) new FontFamilyConverter().ConvertFromString(conf.Font), FontSize = conf.FontSize }; if (conf.A11) { textBlock.HorizontalAlignment = HorizontalAlignment.Left; textBlock.VerticalAlignment = VerticalAlignment.Top; } if (conf.A12) { textBlock.HorizontalAlignment = HorizontalAlignment.Center; textBlock.VerticalAlignment = VerticalAlignment.Top; } if (conf.A13) { textBlock.HorizontalAlignment = HorizontalAlignment.Right; textBlock.VerticalAlignment = VerticalAlignment.Top; } if (conf.A21) { textBlock.HorizontalAlignment = HorizontalAlignment.Left; textBlock.VerticalAlignment = VerticalAlignment.Center; } if (conf.A22) { textBlock.HorizontalAlignment = HorizontalAlignment.Center; textBlock.VerticalAlignment = VerticalAlignment.Center; } if (conf.A23) { textBlock.HorizontalAlignment = HorizontalAlignment.Right; textBlock.VerticalAlignment = VerticalAlignment.Center; } if (conf.A31) { textBlock.HorizontalAlignment = HorizontalAlignment.Left; textBlock.VerticalAlignment = VerticalAlignment.Bottom; } if (conf.A32) { textBlock.HorizontalAlignment = HorizontalAlignment.Center; textBlock.VerticalAlignment = VerticalAlignment.Bottom; } if (conf.A33) { textBlock.HorizontalAlignment = HorizontalAlignment.Right; textBlock.VerticalAlignment = VerticalAlignment.Bottom; } textBlock.Margin = new Thickness(conf.Margins); if (File.Exists(conf.OverlayFile)) { Image overlay = new Image(); overlay.Source = BitmapLoader.Instance.LoadImage(conf.OverlayFile, 0, 0); if (!conf.StrechOverlay) { overlay.HorizontalAlignment = textBlock.HorizontalAlignment; overlay.VerticalAlignment = textBlock.VerticalAlignment; overlay.Stretch = Stretch.None; } else { overlay.HorizontalAlignment = HorizontalAlignment.Stretch; overlay.VerticalAlignment = VerticalAlignment.Stretch; overlay.Stretch = Stretch.UniformToFill; } grid.Children.Add(overlay); grid.UpdateLayout(); } grid.Children.Add(textBlock); grid.UpdateLayout(); BitmapLoader.Save2Jpg( BitmapLoader.SaveImageSource(grid, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight), dest); } return(dest); }