mirror of
https://github.com/Geckon01/Watermark.Net.git
synced 2026-06-17 00:27:47 +00:00
First commit
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
using CommandLine;
|
||||
using Watermark.Net.src.WatermarkNet.Types;
|
||||
using System.Diagnostics;
|
||||
using Watermark.Net.src.WatermarkNet.Core;
|
||||
using Watrmark.Net_CLI.Watermakr.Net.CLI.Enums;
|
||||
using Watrmark.Net_CLI.Watermark.Net.CLI.Models;
|
||||
using Watrmark.Net_CLI.Watermak.Net.CLI.Constants;
|
||||
using Watrmark.Net_CLI;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
Parser.Default.ParseArguments<ConsoleOptions>(args)
|
||||
.WithParsed<ConsoleOptions>(option => {
|
||||
switch (option.WatermarkType)
|
||||
{
|
||||
case WatermarkType.Image:
|
||||
if (option.FilePath != null)
|
||||
ProccessSingleFile(option);
|
||||
if (option.DirectoryPath != null)
|
||||
ProccessDirectory(option);
|
||||
break;
|
||||
case WatermarkType.Text:
|
||||
if (option.FilePath != null)
|
||||
ProccessSingleText(option);
|
||||
else
|
||||
ProccessDirectoryText(option);
|
||||
break;
|
||||
}
|
||||
|
||||
})
|
||||
.WithNotParsed(error => { });
|
||||
|
||||
static void ProccessSingleFile(ConsoleOptions options)
|
||||
{
|
||||
|
||||
}
|
||||
static void ProccessDirectory(ConsoleOptions options)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void ProccessSingleText(ConsoleOptions options)
|
||||
{
|
||||
|
||||
}
|
||||
static void ProccessDirectoryText(ConsoleOptions options)
|
||||
{
|
||||
if (options.WatermarkText == null || options.WatermarkText == string.Empty)
|
||||
throw new ArgumentNullException("Watermark text can not be null");
|
||||
if(options.DirectoryPath == null || !Directory.Exists(options.DirectoryPath))
|
||||
throw new ArgumentNullException("Specified files directory not found");
|
||||
if (options.OutputPath == null || !Directory.Exists(options.OutputPath))
|
||||
throw new ArgumentNullException("Specified output directory not found");
|
||||
|
||||
var directoryFiles = Directory.GetFiles(options.DirectoryPath);
|
||||
|
||||
var filesTotal = directoryFiles.Length;
|
||||
var chunkSize = filesTotal / (options.ThreadsNumber ?? Environment.ProcessorCount);
|
||||
var filesChunks = directoryFiles.ToList().Chunk(chunkSize < 1 ? 1: chunkSize);
|
||||
var filesComplite = 0;
|
||||
|
||||
var watermark = new TextWatermark{
|
||||
Text = options.WatermarkText,
|
||||
Color = options.WatermarkColor ?? Constans.DefaultTextColor,
|
||||
Position = options.WatermarkPositon ?? Constans.DefaultWatermarkPosition,
|
||||
BackroundColor = options.WatermarkBackround ?? Constans.DefaultBackroundColor,
|
||||
Font = Constans.DefaultWatermarkFont,
|
||||
Scale = options.WatermarkScale ?? Constans.DefaultWatermarkScale
|
||||
};
|
||||
var watermarker = new Watermarker();
|
||||
|
||||
Stopwatch stopwatch = new Stopwatch();
|
||||
stopwatch.Start();
|
||||
|
||||
Console.Clear();
|
||||
|
||||
Parallel.ForEach(filesChunks, new ParallelOptions { MaxDegreeOfParallelism = options.ThreadsNumber ?? Environment.ProcessorCount }, chunk =>
|
||||
{
|
||||
foreach (var imagePath in chunk)
|
||||
{
|
||||
var resultedImage = watermarker.ProcessImage(imagePath, options.OutputPath, watermark);
|
||||
|
||||
lock (stopwatch)
|
||||
{
|
||||
Extensions.DrawStats(resultedImage.Path, ++filesComplite, filesTotal, stopwatch);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
stopwatch.Stop();
|
||||
Extensions.DrawCompliteStats(stopwatch.Elapsed);
|
||||
}
|
||||
Reference in New Issue
Block a user