sexta-feira, 10 de novembro de 2017

Halftone

Neste post, vamos explorar a conversão de imagens coloridas para halftone (Meio-tom é um método de impressão que simula os tons contínuos de uma imagem, imprimindo pontos de tinta de uma ou mais cores, variando o tamanho e/ou densidade dos pontos).

Aqui, vamos explorar algoritmos básicos, tanto para criar uma versão meio-tom colorida da imagem orignial, quanto para a geração da versão em preto e branco literalmente, ou seja, contendo apenas essas 2 cores.

Então, vamos ao código. Há 2 funções ColorHalfTone e BWHalfTone, que geram, respectivamente, as versões meio-tom colorida e em preto e branco da imagem original.
Function ColorHalfTone([System.Drawing.Image]$Img) {
    Write-Host -ForegroundColor Green "Aplicando efeito ColorHalfTone na imagem..."
    Write-Host -ForegroundColor Green "Será salvo na mesma pasta um arquivo NomeOriginal_HalfTone.jpg"
    [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)
            ## COLOR HALFTONE
            If ($ColorPixel.R -gt 127) { $R = 255 }
            Else { $R = 0}
            If ($ColorPixel.G -gt 127) { $G = 255 }
            Else { $G = 0}
            If ($ColorPixel.B -gt 127) { $B = 255 }
            Else { $B = 0}

            ## SetPixel para efeito ColorHalfTone
            $A = $ColorPixel.A
            $Img.SetPixel($x,$y,[System.Drawing.Color]::FromArgb([Int32]$A,[Int32]$R,[Int32]$G,[Int32]$B))
        } ## ForEach $x
    } ## ForEach $y
} ## EndFunction ColorHalfTone

Function BWHalfTone([System.Drawing.Image]$Img) {
    Write-Host -ForegroundColor Green "Aplicando efeito BlackWhite HalfTone na imagem..."
    Write-Host -ForegroundColor Green "Será salvo na mesma pasta um arquivo NomeOriginal_HalfTone.jpg"
    [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)
            ## BLACKWHITE HALFTONE
            $R = (0.2125*$ColorPixel.R)+(0.7154*$ColorPixel.G)+(0.0721*$ColorPixel.B)
            If ($R -gt 127) { $R = 255 }
            Else { $R = 0}
            $G = (0.2125*$ColorPixel.R)+(0.7154*$ColorPixel.G)+(0.0721*$ColorPixel.B)
            If ($G -gt 127) { $G = 255 }
            Else { $G = 0}
            $B = (0.2125*$ColorPixel.R)+(0.7154*$ColorPixel.G)+(0.0721*$ColorPixel.B)
            If ($B -gt 127) { $B = 255 }
            Else { $B = 0}

            ## SetPixel para efeito BlackWhite HalfTone
            $A = $ColorPixel.A
            $Img.SetPixel($x,$y,[System.Drawing.Color]::FromArgb([Int32]$A,[Int32]$R,[Int32]$G,[Int32]$B))
        } ## ForEach $x
    } ## ForEach $y
} ## EndFunction BWHalfTone

$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 "##############################################"

ColorHalfTone $Img
#BWHalfTone $Img

Write-Host ""
Write-Host -ForegroundColor Yellow "Conversão concluída!"
$Img.Save($ArquivoSemExt+"_HalfTone.jpg","JPEG")
$Img.Dispose()


IMAGEM COLORIDA 1


EFEITO COLOR HALFTONE


EFEITO BLACKWHITE HALFTONE


IMAGEM COLORIDA 2


EFEITO COLOR HALFTONE


EFEITO BLACKWHITE HALFTONE

Nenhum comentário:

Postar um comentário