Introdução
A ferramenta apresentada foi desenvolvida em PowerShell com o objetivo de oferecer um método simples, rápido e eficiente para a conversão de imagens. Muitas vezes, usuários precisam padronizar formatos, reduzir tamanho de arquivos ou melhorar a compatibilidade entre dispositivos e plataformas. Esse script atende exatamente a essa necessidade, permitindo converter facilmente imagens de vários formatos — como PNG, JPG, JPEG e entre outros, para os padrões mais utilizados: PNG e JPG.
O conversor realiza todo o processo de forma automática: organiza as imagens em pastas específicas, converte para o formato desejado, permite criar um arquivo ZIP com os resultados e ainda pergunta ao usuário se deseja ou não excluir os arquivos originais. Caso as pastas necessárias não existam, o próprio script se encarrega de criá-las. Assim, mesmo usuários com pouco conhecimento técnico podem realizar conversões em lote com segurança e praticidade.
Casos de Uso
O script pode ser usado caso haja a necessidade de deixar uma imagem com uma qualidade maior, podendo muda-la para png, ou caso precisa de uma foto em um arquivo leve, assim fazendo a transferência para o jpg. Por meio de uma função simples, é possível agilizar tal trabalho.
Execução do Script
A execução do script começa com a instalação de uma biblioteca chamada “ImageMagick” pelo comando “winget install”, necessária para realizar a conversão de imagens, após isso ele fará o caminho para a área de trabalho do usuário, as coisas acontecerão em uma pasta principal denominada de “conversão” depois haverá mais duas pastas, denominadas “originais” e “convertidas”, que é onde serão armazenadas as imagens, caso as duas pastas não existam, elas serão criadas através do método:
foreach ($folder in @($pastaMain, $pastaOriginal, $pastaConvertida)) {
if (-not (Test-Path $folder)) {
New-Item -ItemType Directory -Path $folder | Out-Null
}
}E o usuário receberá uma mensagem de confirmação. Na linha:
$extensao="*.png","*.jpg","*.jpeg","*.jfif","*.webp","*.bmp","*.tiff","*.avif", ".ico"Aqui é onde são definidos os tipos de dados que podem ser enviados pra a conversão. Na linha seguinte, através do comando Get-ChildItem são percorridos todos os itens da pasta selecionada através do método Path seguido do nome da pasta.
Após a confirmação de que a pasta existe, ou que foi criada, tem-se a inicialização de um comando de condicional, um if e dentro dele será executado o comando Count para percorrer a pasta, contando as imagens nela contida, caso esteja vazia, retornará uma mensagem informando.
Prosseguindo, se inicializará um laço de repetição, com o comando While, que enquanto não for interrompido selecionando o número “0”, continuará exibindo o menu de escolhas para o usuário com as seguintes opções: (1 – png, 2- jpg, 0 - sair). Assim que uma das opções é escolhida, será feita uma analise de qual das opções foi escolhida para fazer a conversão, ou para sair e caso o usuário digite algo invalido, ele mostrará uma mensagem de erro.
Finalizada a escolha, o script entra em outro laço que pergunta ao usuário se deseja a criação de um arquivo zip para as imagens convertidas e por fim, se deseja excluir os arquivos originais.
Por fim, mostrará a mensagem com a confirmação da conversão de imagens, que é mostrada através do seguinte código:
Write-Host "`nConvertendo imagens para *.$formatoEscolhido* ...`n"Após isso, se inicia um foreach que pegará cada imagem da pasta e as converterá, através do ImageMagick para o tipo selecionado, e as enviará para pasta. Caso a opção de deletar as imagens originais tenha sido escolhida, todas elas serão excluídas através do seguinte comando:
if ($deletar){
Remove-Item -Path $img.FullName -Force
}Caso não tenha sido selecionada, as imagens são enviadas para a outra pasta, atras do comando:
else {
Move-Item -Path $img.FullName -Destination $pastaOriginal -Force
}.Com a realização da conversão e da transferência para as pastas, será feito um arquivo zip caso o usuário tenha solicitado e haverá uma mensagem de confirmação do final.
Conclusão
O script apresentado oferece uma solução prática para converter imagens em lote de forma rápida e organizada. Com menus simples e opções claras, ele permite escolher o formato final, criar um arquivo ZIP e decidir o destino das imagens originais. A automatização do processo com PowerShell e ImageMagick torna o trabalho mais ágil, principalmente para quem lida com muitos arquivos. Assim, a ferramenta se destaca pela praticidade, eficiência e facilidade de uso.
Script completo
Código:
# Comando para instalar a biblioteca necessaria
winget install ImageMagick.Q16-HDRI
# Caminho da area de trabalho do usuario
$desktop = [Environment]::GetFolderPath("Desktop")
# Caminho da pasta principal
$pastaMain = Join-Path $desktop "Conversão"
# Caminhos das pastas
$pastaOriginal = Join-Path $pastaMain "originais"
$pastaConvertida = Join-Path $pastaMain "convertidas"
# Cria as pastas se nao existirem
foreach ($folder in @($pastaMain, $pastaOriginal, $pastaConvertida)) {
if (-not (Test-Path $folder)) {
New-Item -ItemType Directory -Path $folder | Out-Null
}
}
# Mensagem de confimação da Criação de pastas
Write-Host "Pastas criadas em: $pastaMain"
Write-Host ""
# Tipos de extensao dos arquivos que serão lidos
$extensao = "*.png","*.jpg","*.jpeg","*.jfif","*.webp","*.bmp","*.tiff","*.avif", ".ico"
# Lista todas as imagens
$images = Get-ChildItem -Path $pastaMain -Include $extensao -File -Recurse
# If que lê se existem ou não imagens na pasta
if ($images.Count -eq 0) {
Write-Host "Nenhuma imagem encontrada dentro da pasta Conversão."
Start-Sleep -Seconds 5
exit
}
# Pergunta a extensao desejada para a conversao
while ($true) {
Write-Host "Selecione o formato:"
Write-Host "1 - JPG"
Write-Host "2 - PNG"
Write-Host "0 - Sair"
$escolhaForm = Read-Host "Opção"
switch ($escolhaForm) {
"1" {
$formatoEscolhido = "jpg"
$flag = $true
}
"2" {
$formatoEscolhido = "png"
$flag = $true
}
"0" {
Write-Host "Encerrando script!"
Start-Sleep -Seconds 2
exit
}
default {
Write-Host "Opção inválida. Tente novamente.`n"
continue
}
}
if ($flag) { break }
}
$flag = $false
# Pergunta a extensao desejada para a conversao
while ($true) {
Write-Host "Quer criar um ZIP dos arquivos convertidos?:"
Write-Host "1 - Sim"
Write-Host "2 - Não"
Write-Host "0 - Sair"
$escolhaZip = Read-Host "Opção"
switch ($escolhaZip) {
"1" {
$criarZip = $true
$flag = $true
}
"2" {
$criarZip = $false
$flag = $true
}
default {
Write-Host "Opção inválida. Tente novamente.`n"
continue
}
}
if ($flag) { break }
}
# Pergunta se quer deletar os arquivos Originais
while ($true) {
Write-Host "Deseja deletar os arquivos originais:"
Write-Host "1 - Sim"
Write-Host "2 - Não"
$escolhaDel = Read-Host "Opção"
switch ($escolhaDel) {
"1" {
$deletar = $true
$flag = $true
}
"2" {
$deletar = $false
$flag = $true
}
default {
Write-Host "Opção inválida. Tente novamente.`n"
continue
}
}
if ($flag) { break }
}
$flag = $false
#Mensagem para a conversao
Write-Host "`nConvertendo imagens para *.$formatoEscolhido* ...`n"
#Para cada item em imagens, ele realiza a conversão para o formato escolhido (JPG ou PNG), envia
#a imagem convertida para a pasta "Convertida" e a imagem original para a pasta "Original"
foreach ($img in $images) {
# Nome do arquivo convertido
$nomeArq = [System.IO.Path]::GetFileNameWithoutExtension($img.Name) + "." + $formatoEscolhido
$pastaFinal = Join-Path $pastaConvertida $nomeArq
# Executa a conversão com ImageMagick
magick "$($img.FullName)" "$pastaFinal"
#Deleta as imagens originais
if ($deletar){
Remove-Item -Path $img.FullName -Force
#Move as imagens originais pra pasta
} else {
Move-Item -Path $img.FullName -Destination $pastaOriginal -Force
}
Write-Host "Convertido: $($img.Name) → $n"
}
#Cria um zip das imagens convertidas
if ($criarZip) {
$zipNome = Join-Path $pastaMain "Convertidas.zip"
Compress-Archive -Path $pastaConvertida\* -DestinationPath $zipNome
}
#Mensagem de confirmação final
Write-Host "`nProcesso concluido!"
Write-Host "Convertidas em: $pastaConvertida"
Write-Host "Originais em: $pastaOriginal"
