Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - поправить скрипт перекодирования изображений

Ответить
Настройки темы
PowerShell - поправить скрипт перекодирования изображений

Старожил


Сообщения: 286
Благодарности: 10

Профиль | Отправить PM | Цитировать


Изменения
Автор: 9119
Дата: 25-06-2021
Добрый.
Использую такой скрипт:


Код: Выделить весь код
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".


Нужно: чтобы файлы перезаписывались, это принципиально нужно. Может как-то через буфер реализовать. И были не заняты никаким процессом после перекодировки.

Отправлено: 14:28, 25-06-2021

 

Старожил


Сообщения: 286
Благодарности: 10

Профиль | Отправить PM | Цитировать


пока сделал так, чтобы сохраняло под другим именем (дописывало new_), а потом через remove-item -exclude *new_*.* удаляю все ненужное.
но все таки хотелось бы сразу чтобы перезаписывало, и освобождало доступ к файлу.

Отправлено: 18:06, 25-06-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата 9119:
в тоже время по строке
Код: Выделить весь код
$Source.Dispose()
выдает
Код: Выделить весь код
Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Dispose".
»
Так зачем Вы вызываете .Dispose() для строки с полным именем файла?!
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:26, 26-06-2021 | #3


Старожил


Сообщения: 286
Благодарности: 10

Профиль | Отправить PM | Цитировать


Iska, я не совсем понимаю для чего именно его надо вызывать в данном случае...
мне нужно было освободить входной файл, для перезаписи...

Но вопрос в том, что .Dispose() впринципе не вызывается. не для чего.

Где-то попадалась инфа как этот момент( с блокировкой входного файла на перезапись) обходили используя буфер.
т.е входнной файл помещали в буфер и от туда его использовали или как-то так, в результате чего перезаписать файл можно было без проблем и без .Dispose()

Последний раз редактировалось 9119, 26-06-2021 в 22:11.


Отправлено: 22:06, 26-06-2021 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - поправить скрипт перекодирования изображений

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Доработать скрипт копирования файлов изображений mihailov_den@vk Скриптовые языки администрирования Windows 12 21-01-2019 14:08
Delphi - [решено] Помогите поправить скрипт Show & Hide Fles and Folders ufooo000 Программирование и базы данных 4 12-02-2017 18:07
Любой язык - скрипт рекурсивного изменения размера изображений batyaPS Скриптовые языки администрирования Windows 23 23-01-2015 14:06
[решено] Скрипт загрузки изображений и создания эскиза Blast Вебмастеру 8 12-04-2013 00:51
VBS/WSH/JS - [решено] скрипт: перечень сервисов и статусов, как поправить кодировку и отсортировать? andr_mozg Скриптовые языки администрирования Windows 19 24-12-2012 12:31




 
Переход