9119
25-06-2021, 14:28
Добрый.
Использую такой скрипт:
Get-ChildItem -Path "E:\tmp\*" -include *.jpg, *jpg*.*, *.png, *png*.*, *.jpeg, *jpeg*.*, *.webp, *webp*.* -Recurse | foreach-object {
$Source = $_.FullName
$test = [System.IO.Path]::GetDirectoryName($source)
$base= $_.BaseName+".jpg"
$basedir = $test+"\"+$base
Write-Host $basedir
Add-Type -AssemblyName system.drawing
$imageFormat = "System.Drawing.Imaging.ImageFormat" -as [type]
$image = [drawing.image]::FromFile($Source)
# Create a new image
$NewImage = [System.Drawing.Bitmap]::new($Image.Width,$Image.Height)
$NewImage.SetResolution($Image.HorizontalResolution,$Image.VerticalResolution)
# Add graphics based on the new image
$Graphics = [System.Drawing.Graphics]::FromImage($NewImage)
$Graphics.Clear([System.Drawing.Color]::White) # Set the color to white
$Graphics.DrawImageUnscaled($image,0,0) # Add the contents of $image
# Now save the $NewImage instead of $image
$Source.Dispose()
$NewImage.Save($basedir,$imageFormat::Jpeg)
}
находим все по маске в подпапках и перекодируем в jpeg (нужно для лучшей совместимости при последующей обработке)
При выполнении получаю ошибку:
Исключение при вызове "Save" с "2" аргументами: "В GDI+ возникла ошибка общего вида."
ошибка из-за того, что не дает перезаписать файлы, т.к они заняты самим скриптом.
в тоже время по строке
$Source.Dispose()
выдает
Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Dispose".
Нужно: чтобы файлы перезаписывались, это принципиально нужно. Может как-то через буфер реализовать. И были не заняты никаким процессом после перекодировки.
Использую такой скрипт:
Get-ChildItem -Path "E:\tmp\*" -include *.jpg, *jpg*.*, *.png, *png*.*, *.jpeg, *jpeg*.*, *.webp, *webp*.* -Recurse | foreach-object {
$Source = $_.FullName
$test = [System.IO.Path]::GetDirectoryName($source)
$base= $_.BaseName+".jpg"
$basedir = $test+"\"+$base
Write-Host $basedir
Add-Type -AssemblyName system.drawing
$imageFormat = "System.Drawing.Imaging.ImageFormat" -as [type]
$image = [drawing.image]::FromFile($Source)
# Create a new image
$NewImage = [System.Drawing.Bitmap]::new($Image.Width,$Image.Height)
$NewImage.SetResolution($Image.HorizontalResolution,$Image.VerticalResolution)
# Add graphics based on the new image
$Graphics = [System.Drawing.Graphics]::FromImage($NewImage)
$Graphics.Clear([System.Drawing.Color]::White) # Set the color to white
$Graphics.DrawImageUnscaled($image,0,0) # Add the contents of $image
# Now save the $NewImage instead of $image
$Source.Dispose()
$NewImage.Save($basedir,$imageFormat::Jpeg)
}
находим все по маске в подпапках и перекодируем в jpeg (нужно для лучшей совместимости при последующей обработке)
При выполнении получаю ошибку:
Исключение при вызове "Save" с "2" аргументами: "В GDI+ возникла ошибка общего вида."
ошибка из-за того, что не дает перезаписать файлы, т.к они заняты самим скриптом.
в тоже время по строке
$Source.Dispose()
выдает
Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Dispose".
Нужно: чтобы файлы перезаписывались, это принципиально нужно. Может как-то через буфер реализовать. И были не заняты никаким процессом после перекодировки.