sexta-feira, 10 de novembro de 2017

Efeito Sépia

Vamos explorar mais um efeito aplicável sobre uma imagem: o sépia. Também é bastante simples de ser realizado.

Uma possibilidade seria a de primeiro converter a imagem em tons de cinza; depois somar 40 ao canal R (vermelho), somar 20 no canal G (verde) e subtrair 20 do canal B (azul).

Tendo o cuidado dos valores pertencerem ao intervalo [0,255]. Um exemplo de código seria:
Function Sepia([System.Drawing.Image]$Img) {
    Write-Host -ForegroundColor Green "Aplicando efeito Sépia na imagem..."
    Write-Host -ForegroundColor Green "Será salvo na mesma pasta um arquivo NomeOriginal_Sepia"
    [Int32]$p=0
    Foreach($y in (0..($Img.Height-1))) {
        $p++
        If ($p -gt (($Img.Height)*0.05)) { 
            Write-Host -NoNewLine '.'
            $p = 0
        }
        Foreach($x in (0..($Img.Width-1))) {
            $ColorPixel = $Img.GetPixel($x,$y)
            ## SEPIA
            $Sepia = 20
            $R = (0.2125*$ColorPixel.R)+(0.7154*$ColorPixel.G)+(0.0721*$ColorPixel.B)
            $R = $R + ($Sepia * 2)
            $G = (0.2125*$ColorPixel.R)+(0.7154*$ColorPixel.G)+(0.0721*$ColorPixel.B)
            $G = $G + $Sepia
            If ($R -gt 255) {$R = 255}
            If ($G -gt 255) {$G = 255}
            $B = (0.2125*$ColorPixel.R)+(0.7154*$ColorPixel.G)+(0.0721*$ColorPixel.B)
            $B = $B - $Sepia
            If ($B -lt 0) { $B = 0 }
            If ($B -gt 255) {$B = 255}
            ## SetPixel para efeito Sepia
            $A = $ColorPixel.A
            $Img.SetPixel($x,$y,[System.Drawing.Color]::FromArgb([Int32]$A,[Int32]$R,[Int32]$G,[Int32]$B))
        } ## ForEach $x
    } ## ForEach $y
} ## EndFunction Sepia

$Arquivo = New-Object System.Windows.Forms.OpenFileDialog
$Arquivo.filter = "Imagens (*.PNG;*.BMP;*.JPG;*.JPEG;*.GIF)|*.PNG;*.BMP;*.JPG;*.JPEG;*.GIF"
$Arquivo.ShowDialog() | Out-Null
$Ext = ($Arquivo.filename).Substring(($Arquivo.filename).Length-3,3)
$ArquivoSemExt = ($Arquivo.filename).Substring(0,($Arquivo.filename).Length-4)
$Img = [System.Drawing.Image]::FromFile($Arquivo.filename)

Clear-Host
Write-Host "##############################################"
Write-Host "Arquivo de Imagem:"$Arquivo.filename
Write-Host "##############################################"

Sepia $Img

Write-Host ""
Write-Host -ForegroundColor Yellow "Conversão concluída!"
$Img.Save($ArquivoSemExt+"_Sepia."+$Ext)
$Img.Dispose()

Resultados apresentados abaixo.

IMAGEM COLORIDA 1


EFEITO SÉPIA


IMAGEM COLORIDA 2


EFEITO SÉPIA

Nenhum comentário:

Postar um comentário