Skip to content

Commit

Permalink
quite a bunch of new stuff
Browse files Browse the repository at this point in the history
- Added drag-n-drop feature - Just drop files to convert/scale them
- Added blur util
- Added preview feature for noise and blur
- Noise intensity can now be randomized
- Added dataset util "Delete Files Not Present In Both Folders"
- Added "config" tab with option to include incompatible files for file operations
- "Delete Source" gets ignored if input & output are the same files (e.g. when re-encoding images)
  • Loading branch information
N00MKRAD committed Aug 3, 2020
1 parent 719894e commit bdfe852
Show file tree
Hide file tree
Showing 22 changed files with 813 additions and 189 deletions.
Binary file modified .vs/MagickUtils/v16/.suo
Binary file not shown.
47 changes: 47 additions & 0 deletions Config.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MagickUtils
{
class Config
{
static string filename = "magickutils.ini";
public static bool fileOperationsNoExtFilter = true;

public static void WriteConfig ()
{
string cfgString = "";
cfgString += "fileOperationsNoExtFilter" + "=" + fileOperationsNoExtFilter.ToString() + "\n";
File.WriteAllText(Path.Combine(IOUtils.GetAppDataDir(), filename), cfgString);
MessageBox.Show("Config saved.", "Message");
}

public static void ReadConfig ()
{
string cfgPath = Path.Combine(IOUtils.GetAppDataDir(), filename);
if(!File.Exists(cfgPath))
return;
string cfgString = File.ReadAllText(cfgPath);
fileOperationsNoExtFilter = GetBool("fileOperationsNoExtFilter", cfgString);
}

public static bool GetBool (string boolname, string cfgContent)
{
string[] lines = cfgContent.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
foreach(string line in lines)
{
if (line.Contains(boolname))
{
string boolValString = line.Trim().Replace(boolname, "").Replace("=", "");
return boolValString.ToLower() == "true";
}
}
return false;
}
}
}
15 changes: 10 additions & 5 deletions ConvertUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,20 @@ static void PostProcessing (MagickImage img, string sourcePath, string outPath,
Program.sw.Stop();
img.Dispose();
long bytesPost = new FileInfo(outPath).Length;
Program.Print(" -> Done. Size pre: " + Format.Filesize(bytesPre) + " - Size post: " + Format.Filesize(bytesPost) + " - Ratio: " + Format.Ratio(bytesPre, bytesPost));
Program.Print("-> Done. Size pre: " + Format.Filesize(bytesPre) + " - Size post: " + Format.Filesize(bytesPost) + " - Ratio: " + Format.Ratio(bytesPre, bytesPost));
if(delSource)
DelSource(sourcePath);
DelSource(sourcePath, outPath);
}

static void DelSource (string path)
static void DelSource (string sourcePath, string newPath)
{
Program.Print(" -> Deleting source file: " + Path.GetFileName(path) + "...\n");
File.Delete(path);
if(Path.GetExtension(sourcePath) == Path.GetExtension(newPath))
{
Program.Print("-> Not deleting " + Path.GetFileName(sourcePath) + " as it was overwritten");
return;
}
Program.Print("-> Deleting source file: " + Path.GetFileName(sourcePath) + "...");
File.Delete(sourcePath);
}
}
}
69 changes: 69 additions & 0 deletions EffectsTabHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using ImageMagick;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MagickUtils
{
class EffectsTabHelper
{
public static bool useGaussNoise;
public static bool useLapNoise;
public static bool usePoiNoise;
public static bool useUniNoise;
public static int attenMin;
public static int attenMax;
public static bool monochrome;

public static int blurRadiusMin;
public static int blurRadiusMax;

public static void NoisePreview ()
{
Program.mainForm.SetNoiseVars();
FileInfo firstImg = IOUtils.GetFiles()[0];
string tempImgPath = Path.Combine(IOUtils.GetAppDataDir(), "noisepreview" + firstImg.Extension);
if(File.Exists(tempImgPath)) File.Delete(tempImgPath);
File.Copy(firstImg.FullName, tempImgPath);
Random rand = new Random();
EffectsUtils.AddNoise(tempImgPath, GetNoiseTypeList(), attenMin, attenMax, monochrome);
Program.mainForm.PreviewImage(tempImgPath);
}

public static void NoiseApply ()
{
Program.mainForm.SetNoiseVars();
EffectsUtils.AddNoiseDir(GetNoiseTypeList(), attenMin, attenMax, monochrome);
}

static List<NoiseType> GetNoiseTypeList ()
{
List<NoiseType> noiseTypes = new List<NoiseType>();
if(useGaussNoise) noiseTypes.Add(NoiseType.Gaussian);
if(useLapNoise) noiseTypes.Add(NoiseType.Laplacian);
if(usePoiNoise) noiseTypes.Add(NoiseType.Poisson);
if(useUniNoise) noiseTypes.Add(NoiseType.Uniform);
return noiseTypes;
}

public static void BlurPreview ()
{
Program.mainForm.SetBlurVars();
FileInfo firstImg = IOUtils.GetFiles()[0];
string tempImgPath = Path.Combine(IOUtils.GetAppDataDir(), "blurpreview" + firstImg.Extension);
if(File.Exists(tempImgPath)) File.Delete(tempImgPath);
File.Copy(firstImg.FullName, tempImgPath);
EffectsUtils.Blur(tempImgPath, blurRadiusMin, blurRadiusMax);
Program.mainForm.PreviewImage(tempImgPath);
}

public static void BlurApply ()
{
Program.mainForm.SetBlurVars();
EffectsUtils.BlurDir(blurRadiusMin, blurRadiusMax);
}
}
}
55 changes: 49 additions & 6 deletions EffectsUtils.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
Expand All @@ -9,7 +12,7 @@ namespace MagickUtils
{
class EffectsUtils
{
public async static void AddNoiseDir (List<NoiseType> noiseTypes, double attenuate, bool monoChrome)
public async static void AddNoiseDir (List<NoiseType> noiseTypes, double attenMin, double attenMax, bool monoChrome)
{
int counter = 1;
FileInfo[] files = IOUtils.GetFiles();
Expand All @@ -18,30 +21,33 @@ public async static void AddNoiseDir (List<NoiseType> noiseTypes, double attenua
foreach(FileInfo file in files)
{
Program.ShowProgress("Adding Noise to Image ", counter, files.Length);
AddNoise(file.FullName, noiseTypes, attenuate, monoChrome);
AddNoise(file.FullName, noiseTypes, attenMin, attenMax, monoChrome);
counter++;
if(counter % 2 == 0) await Program.PutTaskDelay();
}
Program.PostProcessing(true);
}

public static void AddNoise (string path, List<NoiseType> noiseTypes, double attenuate, bool monoChrome)
public static void AddNoise (string path, List<NoiseType> noiseTypes, double attenMin, double attenMax, bool monoChrome)
{
if(noiseTypes.Count < 1) return;
MagickImage img = IOUtils.ReadImage(path);
NoiseType chosenNoiseType = GetRandomNoiseType(noiseTypes);
PreProcessing(path, "- Noise Type: " + chosenNoiseType.ToString());
Random rand = new Random();
double att = (double)rand.Next((int)attenMin, (int)attenMax + 1);
Program.Print("-> Using attenuate factor " + att);
if(monoChrome)
{
MagickImage noiseImg = new MagickImage(MagickColors.White, img.Width, img.Height);
noiseImg.AddNoise(chosenNoiseType, attenuate);
noiseImg.AddNoise(chosenNoiseType, att);
noiseImg.ColorSpace = ColorSpace.LinearGray;
noiseImg.Write(Path.Combine(IOUtils.GetAppDataDir(), "lastnoiseimg.png"));
img.Composite(noiseImg, CompositeOperator.Multiply);
}
else
{
img.AddNoise(chosenNoiseType, attenuate);
img.AddNoise(chosenNoiseType, att);
}
img.Write(path);
PostProcessing(img, path, path);
Expand All @@ -54,6 +60,42 @@ static NoiseType GetRandomNoiseType (List<NoiseType> typesList)
return typesList[index];
}

public static async void BlurDir (int radiusMin, int radiusMax)
{
int counter = 1;
FileInfo[] files = IOUtils.GetFiles();

Program.PreProcessing();
foreach(FileInfo file in files)
{
Program.ShowProgress("Blurring Image ", counter, files.Length);
Blur(file.FullName, radiusMin, radiusMax);
counter++;
if(counter % 2 == 0) await Program.PutTaskDelay();
}
Program.PostProcessing(true);
}

public static void Blur (string path, int radiusMin, int radiusMax)
{
PreProcessing(path);
MagickImage sourceImg = new MagickImage(path);
var image = Image.FromFile(path);
var blur = new SuperfastBlur.GaussianBlur(image as Bitmap);
Random rand = new Random();
int blurRad = rand.Next(radiusMin, radiusMax + 1);
Program.Print("-> Using radius " + blurRad);
var result = blur.Process(blurRad);
string tempPath = Path.Combine(IOUtils.GetAppDataDir(), "blur-out.png");
result.Save(tempPath, ImageFormat.Png);
result.Dispose();
image.Dispose();
MagickImage outImg = new MagickImage(tempPath);
outImg.Format = sourceImg.Format;
outImg.Write(path);
PostProcessing(null, path, path);
}

static void PreProcessing (string path, string infoSuffix = null)
{
Program.Print("-> Processing " + Path.GetFileName(path) + " " + infoSuffix);
Expand All @@ -63,7 +105,8 @@ static void PreProcessing (string path, string infoSuffix = null)
static void PostProcessing (MagickImage img, string sourcePath, string outPath, bool delSource = false)
{
Program.sw.Stop();
img.Dispose();
if(img != null)
img.Dispose();
long bytesPost = new FileInfo(outPath).Length;
//Program.Print(" -> Done. Size pre: " + Format.Filesize(bytesPre) + " - Size post: " + Format.Filesize(bytesPost) + " - Ratio: " + Format.Ratio(bytesPre, bytesPost));
Program.Print(" -> Done.");
Expand Down
Loading

0 comments on commit bdfe852

Please sign in to comment.