介紹
我正在嘗試將“.bmp”檔案轉換為“.png”檔案。我之前發現了一段使用 PowerShell 執行此操作的代碼。發生的情況是,每轉換一張影像,我的 RAM 使用量增加的增量大致等于影像的大小。這會增加到我擁有的最大 RAM 并減慢我的 PC。
問題
我是否需要從 RAM 中釋放加載的影像,如果需要,我該怎么做?
代碼
我使用的代碼來自這里:
使用的代碼:
$usb1 = 'U:'
$usb2 = 'F:'
$usb3 = 'H:'
$usb4 = 'J:'
$usb5 = 'K:'
$usb6 = 'I:'
$usblist = $usb1,$usb2,$usb3,$usb4,$usb5,$usb6
foreach($usbs in $usblist){
$usb = $usbs
############################# convert ###################################
function ConvertImage{
param ([string]$path)
foreach($path in Get-ChildItem -Directory $usb -Recurse){
Write-Host $path
#Load required assemblies and get object reference
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
foreach($file in (ls "$path\*.bmp")){
$convertfile = new-object System.Drawing.Bitmap($file.Fullname)
$newfilname = ($file.Fullname -replace '([^.]).bmp','$1') ".png"
$convertfile.Save($newfilname, "png")
$file.Fullname
}
}
};ConvertImage -path $args[0]
}
PS。我寧愿繼續使用 PowerShell,因為我用它來進一步處理資料。
uj5u.com熱心網友回復:
ASystem.Drawing.Bitmap是一次性的。使用后丟棄。此外,無需多次重新定義函式或重新加載程式集。
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
$paths = 'U:', 'F:', 'H:', 'J:', 'K:', 'I:'
foreach ($path in $paths) {
Get-ChildItem -File "$path\*.bmp" -Recurse | ForEach-Object {
$bitmap = [System.Drawing.Bitmap]::new($_.FullName)
$newname = $_.FullName -replace '.bmp$','.png'
$bitmap.Save($newname, "png")
$bitmap.Dispose()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/462353.html
