-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPhotoBatch.cpp
130 lines (90 loc) · 4.26 KB
/
PhotoBatch.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
#include <iomanip>
#include <array>
#include "Args.h"
#include "ArgumentParser.h"
#include "Mode.h"
#include "ModesFactory.h"
static constexpr const char* HelpMessage =
R"(PhotoBatch Help
[USO]: ./PhotoBatch --[Modo] [Opções...]
Nessa Versão o PhotoBatch tem 4 modos de operação. Somente um modo pode estar ativo.
Modos:
--Rename : Ativa o modo de renomear arquivos
--Scale : Ativa o modo de converter arquivos
--Convert : Ativa o modo de redimensionar arquivos
--Resize : Ativa o modo de escalar
As seguintes opções são comuns a todos os modos:
--Folder : Especifica a pasta onde o PhotoBatch irá atuar
--Filter : Especifica o filtro usado para selecionar arquivos
Opções do modo Rename:
No modo Rename, cada arquivo selecionado será renomeado o formato
<Prefix>_<N>.<ext>, onde <Prefix> e <N> são especificados através de opções.
<ext> é a extensão do arquivo que permanece inalterada.
--Prefix=<Prefix> : Prefixo usado para renomear os arquivos
--StartNumber=<N> : Número inicial a ser adicionado em cada arquivo que for renomeado
Opções do modo Convert:
No modo Convert, cada arquivo selecionado será convertido do formato <form> para o formato <to>.
<form> e <to> não podem ser iguais. O nome do arquivo permanece inalterado.
--From=<jpg|png> : Extensão de origem para conversão
--To=<jpg|png> : Extensão de destino para conversão
Opções do modo Resize:
No modo Resize, cada arquivo selecionado será redimensionado para as dimensões
especifficadas nas seguintes opções. Note que N >= 1.
--Width=<N> : Novo comprimento da imagem
--Height=<N> : Nova altura da imagem
Opções do modo Scale:
No modo Scale, cada arquivo selecionado será escalado uniformimente pelo
fator especificado pelas seguintes opções. Note que N > 0 e será interpretado como um número real.
--Amount=<N> : Fator de escala a ser aplicado em cada imagem selecionada.
Exemplos de uso:
Renomear todos os arquivos da pasta "C:\Viagem" com a extens�o ".png" para Viagem_N.png, onde N come�a do 0
PhotoBatch --Rename --Folder="C:\Viagem" --Filter=".png" --StartNumber=0
Redimensionar todos os arquivos na pasta "C:\Viagem" com a extens�o ".jpg" para o tamanho 500x500
PhotoBatch --Resize --Folder="C:\Viagem" --Filter=".jpg" --Width=500 --Height=500
Converter todos os arquivos da pasta "C:\Viagem" de "png" para "jpg"
PhotoBatch --Convert --Folder="C:\Viagem" --From=png --To=jpg
Reduzir o pela metade o tamanho de todos os arquivos "png" da pasta "C:\Viagem"
PhotoBatch --Scale --Folder="C:\Viagem" --Filter=".png" --Amount=0.5
)";
int main(int argc, const char* argv[])
{
setlocale(LC_ALL, "pt_BR");
setlocale(LC_NUMERIC, "en_US");
ArgumentParser argParser;
argParser.RegisterFlag(Args::Flags::Rename);
argParser.RegisterFlag(Args::Flags::Convert);
argParser.RegisterFlag(Args::Flags::Resize);
argParser.RegisterFlag(Args::Flags::Scale);
argParser.RegisterFlag(Args::Flags::Help);
argParser.RegisterOption(Args::Options::Folder);
argParser.RegisterOption(Args::Options::Filter);
argParser.RegisterOption(Args::Options::Width);
argParser.RegisterOption(Args::Options::Height);
argParser.RegisterOption(Args::Options::Amount);
argParser.RegisterOption(Args::Options::Prefix);
argParser.RegisterOption(Args::Options::StartNumber);
argParser.RegisterOption(Args::Options::From);
argParser.RegisterOption(Args::Options::To);
argParser.RegisterOption(Args::Options::Quality);
argParser.SetHelpMessage(HelpMessage);
argParser.Parse(argc, argv);
if(argParser.GetFlag(Args::Flags::Help))
{
std::cout << argParser.GetHelpMessage() << std::endl;
}else{
try
{
if(std::unique_ptr<Mode> PhotoBatchMode = CreateModeFactory(argParser))
{
PhotoBatchMode->Run();
}
}
catch(const std::exception& exception)
{
std::cerr << "Erro: " << exception.what() << std::endl;
std::cerr << "Para mais informações rode o PhotoBatch com a flag --help!" << std::endl;
}
}
return 0;
}