V dnešnom článku sa pozrieme a nahliadneme na zdrojový kód ktorý pracuje s grafickými súbormi
power shell dokáže vykonávať scripty VisualBasicu alebo napríklad knihovni DLL
Ako menšiu ukážku si vytvoríme skript na vytvorenie miniatúry obrázka, a aby to nebolo až tak jednoduché, tak si ešte originál narežeme na 4 rovnaké časti, a všetko si to vykonáme vo vlastnej funkcii.
Myslím že tento script je určený pre pokročilejších.Predpokladám, že pre takých prídu moje slová, okolo toho , dosti nezaujímavé. Preto pridávam len kód z komentármi .
[reflection.assembly]::LoadWithPartialName("System.Drawing") #načítame si extednú knihovnu windiwsu
function cutImage #vlastná funkcia na rezanie obrázka
{param ($Name, $saveName, $unit) #parametre
$OldBitmap = new-object System.Drawing.Bitmap ($Name+".jpg") #načítame obrázok
if ($error.count -ne 0) { #zachytíme prípadné chybové hlásenie do súboru
$error | out-file "C:konvertovanepowerShellLog.txt" -append -encoding default
$error[($error.count-1)].TargetObject | out-file "C:konvertovanepowerShellLog.txt" -append -encoding default
echo $_>>"powerShellLog.txt"
$error.clear()
}
$w=[int]($OldBitmap.Width/2) #zistíme si správny pomer strán, a zaokrúhlime ich(vložíme do typu bez desatinej čiarky)
$h=[int]($OldBitmap.Height/2)
$NewBitmap = new-object System.Drawing.Bitmap $w,$h #vytvoríme prázdny obrazok z požadovanou velkostou
$g=[System.Drawing.Graphics]::FromImage($NewBitmap) #prevezneme si z neho kresliacu oblast
$g.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic #nastavíme kvalitu vykreslovania
$rect = new-object Drawing.Rectangle 0, 0, $w, $h #vytvoríme si cielovú mierku
if (!(Test-Path ($saveName+"-1-1.jpg"))) {#testujeme či obrázok existuje
$rect2 = new-object Drawing.Rectangle 0, 0, $w, $h #vytvoríme si zdrojovú mierku
$g.DrawImage($OldBitmap, $rect, $rect2, $unit) #vykreslíme obrázok podla zdrojovej mierky, do cielovej mierky
$NewBitmap.Save($saveName+"-1-1.jpg", ([system.drawing.imaging.imageformat]::jpeg)) #obrázok uložíme
}
if (!(Test-Path ($saveName+"-1-2.jpg"))) {
$rect2 = new-object Drawing.Rectangle $w, 0, $w, $h
$g.DrawImage($OldBitmap, $rect, $rect2, $unit)
$NewBitmap.Save($saveName+"-1-2.jpg", ([system.drawing.imaging.imageformat]::jpeg))
}
if (!(Test-Path ($saveName+"-2-1.jpg"))) {
$rect2 = new-object Drawing.Rectangle 0, 0, $w, $h
$g.DrawImage($OldBitmap, $rect, $rect2, $unit)
$NewBitmap.Save($saveName+"-2-1.jpg", ([system.drawing.imaging.imageformat]::jpeg))
}
if (!(Test-Path ($saveName+"-2-2.jpg"))) {
$rect2 = new-object Drawing.Rectangle $w, $h, $w, $h
$g.DrawImage($OldBitmap, $rect, $rect2, $unit)
$NewBitmap.Save($saveName+"-2-2.jpg", ([system.drawing.imaging.imageformat]::jpeg))
}
if (!(Test-Path ($saveName+"-preview.jpg"))) {#testujeme či už existuje miniatúra
$rect = new-object Drawing.Rectangle 0, 0, 300, 300 #velkost miniatúry
$g.DrawImage($OldBitmap, $rect) #vykresl9me miniatúru
$NewBitmap.Save($saveName+"-preview.jpg", ([system.drawing.imaging.imageformat]::jpeg)) # ulo69me miniat[ru
}
$NewBitmap.Dispose() #vymažeme objekty z pameti
$OldBitmap.Dispose()
$g.Dispose()
}
#samotný skript
#------------------------------------
$filename="C:obrazky"
$export_file="C:obrazky/konvertovane"
#------------------------------------
$units = [System.Drawing.GraphicsUnit]::Pixel # nastavenie ktorý určuje typ kopírovania
CD $filename # presunieme sa do zložky
foreach ($podzlozka in get-Childitem $filename) {#prehliadame zložku
if (!(Test-Path ("$export_file$podzlozka"))) { # testujeme či zložka neexistuje
[IO.Directory]::CreateDirectory("$export_file$podzlozka") # vytvárame zloku pomocou externej knihovny IO.Directory
}
foreach ($podPodSlozka in get-Childitem $filename$podzlozka) {
if (!(Test-Path ("$export_file$podzlozka$podPodSlozka"))) {
[IO.Directory]::CreateDirectory("$export_file$podzlozka$podPodSlozka")
}
foreach ($obrazok in Get-ChildItem $filename$podzlozka$podPodSlozka*.jpg) {
$nname=$stvrtky.Name.Replace(".jpg","") #vymažeme z názvu príponu kôli pomenovaniu rozrezaných štvrtiek
$lname="$filename$podzlozka$podPodSlozka$nname" #knihovna graphics vyžaduje plný názov cesty
$sname="$export_file$podzlozka$podPodSlozka$nname"
cutImage $lname $sname $units #voláme vlastnú funkciu
}
}
}
Textový formát
užitočné linky
základné príkazy
externé knihovny windowsu
vykresľovanie na obrazovku
zdielanie kódov powerShell
Ako menšiu ukážku si vytvoríme skript na vytvorenie miniatúry obrázka, a aby to nebolo až tak jednoduché, tak si ešte originál narežeme na 4 rovnaké časti, a všetko si to vykonáme vo vlastnej funkcii.
Myslím že tento script je určený pre pokročilejších.Predpokladám, že pre takých prídu moje slová, okolo toho , dosti nezaujímavé. Preto pridávam len kód z komentármi .
[reflection.assembly]::LoadWithPartialName("System.Drawing") #načítame si extednú knihovnu windiwsu
function cutImage #vlastná funkcia na rezanie obrázka
{param ($Name, $saveName, $unit) #parametre
$OldBitmap = new-object System.Drawing.Bitmap ($Name+".jpg") #načítame obrázok
if ($error.count -ne 0) { #zachytíme prípadné chybové hlásenie do súboru
$error | out-file "C:konvertovanepowerShellLog.txt" -append -encoding default
$error[($error.count-1)].TargetObject | out-file "C:konvertovanepowerShellLog.txt" -append -encoding default
echo $_>>"powerShellLog.txt"
$error.clear()
}
$w=[int]($OldBitmap.Width/2) #zistíme si správny pomer strán, a zaokrúhlime ich(vložíme do typu bez desatinej čiarky)
$h=[int]($OldBitmap.Height/2)
$NewBitmap = new-object System.Drawing.Bitmap $w,$h #vytvoríme prázdny obrazok z požadovanou velkostou
$g=[System.Drawing.Graphics]::FromImage($NewBitmap) #prevezneme si z neho kresliacu oblast
$g.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic #nastavíme kvalitu vykreslovania
$rect = new-object Drawing.Rectangle 0, 0, $w, $h #vytvoríme si cielovú mierku
if (!(Test-Path ($saveName+"-1-1.jpg"))) {#testujeme či obrázok existuje
$rect2 = new-object Drawing.Rectangle 0, 0, $w, $h #vytvoríme si zdrojovú mierku
$g.DrawImage($OldBitmap, $rect, $rect2, $unit) #vykreslíme obrázok podla zdrojovej mierky, do cielovej mierky
$NewBitmap.Save($saveName+"-1-1.jpg", ([system.drawing.imaging.imageformat]::jpeg)) #obrázok uložíme
}
if (!(Test-Path ($saveName+"-1-2.jpg"))) {
$rect2 = new-object Drawing.Rectangle $w, 0, $w, $h
$g.DrawImage($OldBitmap, $rect, $rect2, $unit)
$NewBitmap.Save($saveName+"-1-2.jpg", ([system.drawing.imaging.imageformat]::jpeg))
}
if (!(Test-Path ($saveName+"-2-1.jpg"))) {
$rect2 = new-object Drawing.Rectangle 0, 0, $w, $h
$g.DrawImage($OldBitmap, $rect, $rect2, $unit)
$NewBitmap.Save($saveName+"-2-1.jpg", ([system.drawing.imaging.imageformat]::jpeg))
}
if (!(Test-Path ($saveName+"-2-2.jpg"))) {
$rect2 = new-object Drawing.Rectangle $w, $h, $w, $h
$g.DrawImage($OldBitmap, $rect, $rect2, $unit)
$NewBitmap.Save($saveName+"-2-2.jpg", ([system.drawing.imaging.imageformat]::jpeg))
}
if (!(Test-Path ($saveName+"-preview.jpg"))) {#testujeme či už existuje miniatúra
$rect = new-object Drawing.Rectangle 0, 0, 300, 300 #velkost miniatúry
$g.DrawImage($OldBitmap, $rect) #vykresl9me miniatúru
$NewBitmap.Save($saveName+"-preview.jpg", ([system.drawing.imaging.imageformat]::jpeg)) # ulo69me miniat[ru
}
$NewBitmap.Dispose() #vymažeme objekty z pameti
$OldBitmap.Dispose()
$g.Dispose()
}
#samotný skript
#------------------------------------
$filename="C:obrazky"
$export_file="C:obrazky/konvertovane"
#------------------------------------
$units = [System.Drawing.GraphicsUnit]::Pixel # nastavenie ktorý určuje typ kopírovania
CD $filename # presunieme sa do zložky
foreach ($podzlozka in get-Childitem $filename) {#prehliadame zložku
if (!(Test-Path ("$export_file$podzlozka"))) { # testujeme či zložka neexistuje
[IO.Directory]::CreateDirectory("$export_file$podzlozka") # vytvárame zloku pomocou externej knihovny IO.Directory
}
foreach ($podPodSlozka in get-Childitem $filename$podzlozka) {
if (!(Test-Path ("$export_file$podzlozka$podPodSlozka"))) {
[IO.Directory]::CreateDirectory("$export_file$podzlozka$podPodSlozka")
}
foreach ($obrazok in Get-ChildItem $filename$podzlozka$podPodSlozka*.jpg) {
$nname=$stvrtky.Name.Replace(".jpg","") #vymažeme z názvu príponu kôli pomenovaniu rozrezaných štvrtiek
$lname="$filename$podzlozka$podPodSlozka$nname" #knihovna graphics vyžaduje plný názov cesty
$sname="$export_file$podzlozka$podPodSlozka$nname"
cutImage $lname $sname $units #voláme vlastnú funkciu
}
}
}
Textový formát
užitočné linky
základné príkazy
externé knihovny windowsu
vykresľovanie na obrazovku
zdielanie kódov powerShell
Komentáře
Přidat nový
Pro přispívání musíte být přihlášen
Zapsal moddo - 21.08.2010 12:36
Velmi zajimave.



