-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added quite some code to actually optimize images
- Loading branch information
Showing
11 changed files
with
271 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
namespace DeveImageOptimizer | ||
{ | ||
public static class Constants | ||
{ | ||
public static string[] ValidExtensions { get; } = new string[] { ".PNG", ".JPG", ".JPEG", ".GIF" }; | ||
public const string TempDirectoryName = "Temp"; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
38 changes: 38 additions & 0 deletions
38
DeveImageOptimizer/FileProcessing/FileOptimizerProcessor.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
using DeveImageOptimizer.Helpers; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Diagnostics; | ||
using System.IO; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace DeveImageOptimizer.FileProcessing | ||
{ | ||
public class FileOptimizerProcessor | ||
{ | ||
private string _pathToFileOptimizer; | ||
private string _tempDirectory; | ||
|
||
public FileOptimizerProcessor(string pathToFileOptimizer, string tempDirectory) | ||
{ | ||
_pathToFileOptimizer = pathToFileOptimizer; | ||
_tempDirectory = tempDirectory; | ||
|
||
Directory.CreateDirectory(tempDirectory); | ||
} | ||
|
||
public async Task<bool> OptimizeFile(string fileToOptimize) | ||
{ | ||
var fileName = Path.GetFileName(fileToOptimize); | ||
var tempFilePath = Path.Combine(_tempDirectory, fileName); | ||
|
||
await AsyncFileHelper.CopyFileAsync(fileToOptimize, tempFilePath, true); | ||
|
||
var processStartInfo = new ProcessStartInfo(_pathToFileOptimizer, tempFilePath); | ||
await ProcessRunner.RunProcessAsync(processStartInfo); | ||
|
||
return await ImageComparer.AreImagesEqualAsync(fileToOptimize, tempFilePath); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
using DeveImageOptimizer.ProcessingState; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.IO; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace DeveImageOptimizer.FileProcessing | ||
{ | ||
public class FileProcessor | ||
{ | ||
private FileOptimizerProcessor _fileOptimizer; | ||
private ProcessingStateData _processingStateData; | ||
|
||
public FileProcessor(FileOptimizerProcessor fileOptimizer, ProcessingStateData processingStateData) | ||
{ | ||
_fileOptimizer = fileOptimizer; | ||
_processingStateData = processingStateData; | ||
} | ||
|
||
public async Task ProcessDirectory(string directory) | ||
{ | ||
await ProcessDirectoryInternal(directory); | ||
} | ||
|
||
private async Task ProcessDirectoryInternal(string directory) | ||
{ | ||
var files = Directory.GetFiles(directory); | ||
|
||
foreach (var file in files) | ||
{ | ||
await ProcessFile(file); | ||
} | ||
|
||
var directories = Directory.GetDirectories(directory); | ||
|
||
foreach (var subDirectory in directories) | ||
{ | ||
await ProcessDirectoryInternal(subDirectory); | ||
} | ||
} | ||
|
||
private async Task ProcessFile(string file) | ||
{ | ||
var extension = Path.GetExtension(file).ToUpperInvariant(); | ||
if (Constants.ValidExtensions.Contains(extension)) | ||
{ | ||
var worked = await _fileOptimizer.OptimizeFile(file); | ||
|
||
if (worked) | ||
{ | ||
_processingStateData.ProcessedFiles.Add(file); | ||
} | ||
else | ||
{ | ||
_processingStateData.FailedFiles.Add(file); | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
using System.IO; | ||
using System.Threading.Tasks; | ||
|
||
namespace DeveImageOptimizer.Helpers | ||
{ | ||
public static class AsyncFileHelper | ||
{ | ||
public static async Task CopyFileAsync(string sourceFile, string destinationFile, bool overwrite = false) | ||
{ | ||
using (var sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.Asynchronous | FileOptions.SequentialScan)) | ||
{ | ||
using (var destinationStream = new FileStream(destinationFile, overwrite ? FileMode.Create : FileMode.CreateNew, FileAccess.Write, FileShare.None, 4096, FileOptions.Asynchronous | FileOptions.SequentialScan)) | ||
{ | ||
await sourceStream.CopyToAsync(destinationStream); | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
using System; | ||
using System.IO; | ||
using System.Reflection; | ||
|
||
namespace DeveImageOptimizer.Helpers | ||
{ | ||
public static class FolderHelperMethods | ||
{ | ||
public static Lazy<string> AssemblyDirectory = new Lazy<string>(() => CreateAssemblyDirectory()); | ||
|
||
private static string CreateAssemblyDirectory() | ||
{ | ||
string codeBase = Assembly.GetExecutingAssembly().CodeBase; | ||
UriBuilder uri = new UriBuilder(codeBase); | ||
string path = Uri.UnescapeDataString(uri.Path); | ||
return Path.GetDirectoryName(path); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
using System.Drawing; | ||
using System.Threading.Tasks; | ||
|
||
namespace DeveImageOptimizer.Helpers | ||
{ | ||
public static class ImageComparer | ||
{ | ||
public static async Task<bool> AreImagesEqualAsync(string image1Path, string image2Path) | ||
{ | ||
//on bitmap asynchronously | ||
return await Task.Run(() => | ||
{ | ||
return AreImagesEqual(image1Path, image2Path); | ||
}); | ||
} | ||
|
||
public static bool AreImagesEqual(string image1Path, string image2Path) | ||
{ | ||
using (var image1 = new Bitmap(image1Path)) | ||
{ | ||
using (var image2 = new Bitmap(image2Path)) | ||
{ | ||
if (image1.Size != image2.Size) | ||
return false; | ||
|
||
for (int y = 0; y < image1.Height; y++) | ||
{ | ||
for (int x = 0; x < image1.Width; x++) | ||
{ | ||
var pixel1 = image1.GetPixel(x, y); | ||
var pixel2 = image2.GetPixel(x, y); | ||
|
||
if (pixel1 != pixel2) | ||
return false; | ||
} | ||
} | ||
} | ||
} | ||
|
||
return true; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Diagnostics; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace DeveImageOptimizer.Helpers | ||
{ | ||
public static class ProcessRunner | ||
{ | ||
public static Task RunProcessAsync(ProcessStartInfo processStartInfo) | ||
{ | ||
// there is no non-generic TaskCompletionSource | ||
var tcs = new TaskCompletionSource<bool>(); | ||
|
||
var process = new Process | ||
{ | ||
StartInfo = processStartInfo, | ||
EnableRaisingEvents = true | ||
}; | ||
|
||
process.Exited += (sender, args) => | ||
{ | ||
tcs.SetResult(true); | ||
process.Dispose(); | ||
}; | ||
|
||
process.Start(); | ||
|
||
return tcs.Task; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters