Что нового

Файловая система Сортировка файлов по каталогам согласно настройкам из файла

ason

Новичок
Сообщения
25
Репутация
0
День добрый всем! Подскажите, пожалуйста, в теории или на примере, как правильно реализовать скрипт.

Есть текстовый файл с именами каталогов и файлов.

Android (27)
icon-144x144.png
pushlargeicon-96x96.png
pushlargeicon-144x144.png
....
iOS (29)
icon-29x29.png
splash-320x480.png
....
Windows Store (6)
icon-50x50.png
splash-2048x1536.png
.....

Нужно разложить файлы по каталогам также, как они идут по порядку в этом текстовом файле.
Например: при считывании строки, я определил, что это каталог Android, значит все следующие строки относятся к нему, пока не появится строка iOS. Следующие за iOS строки относятся к ней, пока не появится строка Windows и т.д.
 

Вложения

  • Settings_original.txt
    1.3 КБ · Просмотры: 6
Последнее редактирование:

Norm

Продвинутый
Сообщения
279
Репутация
74
Не сосем понял.
Вы хотите разделить эти строки по разным файлам или что-то другое?
Как должен выглядеть конечный резултат?
 
Последнее редактирование:
  • Like
Реакции: ason
Автор
A

ason

Новичок
Сообщения
25
Репутация
0
Есть скрипт, который изменяет размер изображения. На выходе получаю много файлов разного размера, которые нужно разложить по каталогам. Для примера прикрепил к сообщению скрипт, картинку и файл настроек.
Сообщение автоматически объединено:

Страшно показывать мои мучения, но может быть это покажет примерно, что нужно.

Код:
#include <GDIPlus.au3>
#include <WinAPI.au3>

Global $Height, $Width
Local $hPathImage = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл изображения (*.png)')
Local $hPathSettings = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл настроек (*.txt)')
Local $hSettingsFile = FileOpen($hPathSettings, 0)
;If Not @error then MsgBox(0,'',$hPathSettings)

DirCreate(@ScriptDir & '\Screen')

Local $FilesDir, $NewDir, $str
While 1


    ; Читаем файл
    $sStringImageName = FileReadLine($hSettingsFile) ;возращаем строку из файла настроек

    ; Если строка соответстует шаблону "Android, iOs, Windows" тогда изменяем значение
    If $str = StringRegExp($sStringImageName, '([A-Z][a-z]+|iOS)', 1) Then ;находим в строке совпадение с шаблоном
        $FilesDir = $str
        $NewDir = DirCreate(@ScriptDir & '\Screen\' & $str) ;создаем каталог $FilesDir

        ;Иначе Если строка равна шаблону "Группы чисел" тогда переносим ее в каталог $FilesDir
    ElseIf $str = StringRegExp($sStringImageName, '([0-9]+)x([0-9]+)', 1) Then ;находим в строке совпадение с шаблоном
        $str = $sStringImageName
        FileCopy($hPathImage, @ScriptDir & '\Screen\' & $FilesDir & '\') ; Сохраняем файл в директории $FilesDir

    EndIf

WEnd

FileClose($hPathSettings)

MsgBox(0, '', '      Ok!')
 

Вложения

  • КартинкиДляМобильногоПриложения1С.au3
    2.8 КБ · Просмотры: 2
  • Settings_original.txt
    1.3 КБ · Просмотры: 3
  • простой_учет.png
    185.5 КБ · Просмотры: 2
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Есть скрипт, который изменяет размер изображения. На выходе получаю много файлов разного размера
У вас этот текстовый файл "настроек" отличается от того наличием дополнительных строк названий систем. Просто разделите тот файл на три файла и тем скриптом сразу создавайте файлы в нужных папках в зависимости от текущего файла с данными.
 
  • Like
Реакции: ason
Автор
A

ason

Новичок
Сообщения
25
Репутация
0
У вас этот текстовый файл "настроек" отличается от того наличием дополнительных строк названий систем. Просто разделите тот файл на три файла и тем скриптом сразу создавайте файлы в нужных папках в зависимости от текущего файла с данными.
Мысль хорошая, чтобы избавить меня от мучений, но это слишком легкий путь)

Идея, скормить скрипту файл настроек и получить на выходе zip-архив с жатыми файлами с сортировкой по каталогам.
Сообщение автоматически объединено:

Сейчас завис на этом этапе. Не пойму, почему не отрабатывает первое условие.

Код:
#include <GDIPlus.au3>
#include <WinAPI.au3>

DirCreate(@ScriptDir & '\Screen')
Local $FilesDir, $NewDir, $str
Local $hPathImage = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл изображения (*.png)')
Local $hPathSettings = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл настроек (*.txt)')
Local $hSettingsFile = FileOpen($hPathSettings, 0)

While 1


    ; Читаем файл
    $sStringImageName = FileReadLine($hSettingsFile) ;возращаем строку из файла настроек  = False
    If @error = -1 Then ExitLoop
    If MsgBox(1, "Прочитанная строка:", $sStringImageName & @CRLF & '$str = ' & $str) = 2 Then ExitLoop

    ; Если строка соответстует шаблону "Android, iOs, Windows" тогда изменяем значение
    If $str = StringRegExp($sStringImageName, '([A-Z][a-z]+|\iOS)', 1) Then ;находим в строке совпадение с шаблоном
        MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '    If' & @CRLF & @CRLF & 'Return:' & @CRLF &     $str) ;### Debug MSGBOX

;~         $FilesDir = $str
;~         MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '    If' & @CRLF & @CRLF & 'Return:' & @CRLF &     $FilesDir) ;### Debug MSGBOX

        $NewDir = DirCreate(@ScriptDir & '\Screen\' & $str) ;создаем каталог $FilesDir
        MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '        $NewDir' & @CRLF & @CRLF & 'Return:' & @CRLF &         $NewDir) ;### Debug MSGBOX

        ;Иначе Если строка равна шаблону "Группы чисел" тогда переносим ее в каталог $FilesDir
    ElseIf $str = StringRegExp($sStringImageName, '([0-9]+)x([0-9]+)', 1) Then ;находим в строке совпадение с шаблоном
        MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '    ElseIf' & @CRLF & @CRLF & 'Return:' & @CRLF &     $str) ;### Debug MSGBOX

        $str = $sStringImageName
        MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '        $str' & @CRLF & @CRLF & 'Return:' & @CRLF &         $str) ;### Debug MSGBOX

        FileCopy($hPathImage, @ScriptDir & '\Screen\' & $FilesDir & '\') ; Сохраняем файл в директории $FilesDir
        MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '        FileCopy($hPathImage, @ScriptDir & ''\Screen\'' & $FilesDir & ''\'')' & @CRLF & @CRLF & 'Return:' & @CRLF &         FileCopy($hPathImage, @ScriptDir & '\Screen\' & $FilesDir & '\')) ;### Debug MSGBOX

    EndIf

WEnd

FileClose($hPathSettings)

MsgBox(0, '', '      Ok!')

Сообщение автоматически объединено:

Код:
#include <GDIPlus.au3>
#include <WinAPI.au3>

DirCreate(@ScriptDir & '\Screen')
Local $FilesDir, $NewDir, $str
Local $hPathImage = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл изображения (*.png)')
Local $hPathSettings = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл настроек (*.txt)')
Local $hSettingsFile = FileOpen($hPathSettings, 0)

While 1

    ; Читаем файл
    $sStringImageName = FileReadLine($hSettingsFile) ;возращаем строку из файла настроек  = False
    ; Если строка соответстует шаблону "Android, iOs, Windows" тогда изменяем значение
    If $str = StringRegExp($sStringImageName, '([A-Z][a-z]+|\iOS)', 1) Then ;находим в строке совпадение с шаблоном
        $NewDir = DirCreate(@ScriptDir & '\Screen\' & $str) ;создаем каталог $FilesDir

        ;Иначе Если строка равна шаблону "Группы чисел" тогда переносим ее в каталог $FilesDir
    ElseIf $str = StringRegExp($sStringImageName, '([0-9]+)x([0-9]+)', 1) Then ;находим в строке совпадение с шаблоном
        $str = $sStringImageName
        FileCopy($hPathImage, @ScriptDir & '\Screen\' & $FilesDir & '\') ; Сохраняем файл в директории $FilesDir

    EndIf

WEnd

FileClose($hPathSettings)

MsgBox(0, '', '      Ok!')
 
Последнее редактирование:
Автор
A

ason

Новичок
Сообщения
25
Репутация
0
Используйте формат ini-файла и пользуйтесь Ini* функциями. Это избавит вас от парсинга.
Я на правильном пути ? Файл нужно привести к такому формату ?

[Android]
Image=icon-36x36.png
Image=icon-48x48.png
Image=icon-72x72.png
...........
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Имена параметров лучше сделать разные (Image1=, Image2=). Иначе прочитается только первый.
 
  • Like
Реакции: ason

Norm

Продвинутый
Сообщения
279
Репутация
74
Есть скрипт, который изменяет размер изображения. На выходе получаю много файлов разного размера,
Почему бы эти файлы не раскладывать по нужным каталогам сразу после изменения размера?
 
  • Like
Реакции: ason
Автор
A

ason

Новичок
Сообщения
25
Репутация
0
Почему бы эти файлы не раскладывать по нужным каталогам сразу после изменения размера?
К этому я иду. Не получается пока собрать логику. Пока не разобрался, по какому критерию файл помещать в тот или иной каталог.
Сообщение автоматически объединено:

Имена параметров лучше сделать разные (Image1=, Image2=). Иначе прочитается только первый.
Количество параметров может изменятся со временем. Взял из справки перебор в цикле.

Код:
#Include <GDIPlus.au3>
#Include <WinAPI.au3>

Local $hPathSettingsFile = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл настроек (*.ini)')

            $strFolder = IniReadSectionNames($hPathSettingsFile)
                if IsArray ($strFolder) then
                $dirAndroid = String($strFolder[1])
                DirCreate(@ScriptDir & '\Screen\' & $dirAndroid)
                $diriOS = String($strFolder[2])
                DirCreate(@ScriptDir & '\Screen\' & $diriOS)
                $dirWindows = String($strFolder[3])
                DirCreate(@ScriptDir & '\Screen\' & $dirWindows)
                EndIf


$var = IniReadSection($hPathSettingsFile, $dirAndroid)
If @error Then
    MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
Else
    For $i = 1 To $var[0][0]
        MsgBox(4096, "", "Параметр: " & $var[$i][0] & @CRLF & "Значение: " & $var[$i][1])
    Next
EndIf
 

Norm

Продвинутый
Сообщения
279
Репутация
74
Пока не разобрался, по какому критерию файл помещать в тот или иной каталог.
В этом то и проблема.
По названию файлов не получается, поскольку во всех ртёх блоках встречаются идентичные имена файлов.
 
  • Like
Реакции: ason

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
по какому критерию файл помещать в тот или иной каталог
Вы же сами создаёте файл настроек. Имя секции - это каталог. Все файлы, описанные в секции, помещаете в соответствующий каталог.
Или я чего-то не понимаю.
 
  • Like
Реакции: ason
Автор
A

ason

Новичок
Сообщения
25
Репутация
0
Вы же сами создаёте файл настроек. Имя секции - это каталог. Все файлы, описанные в секции, помещаете в соответствующий каталог.
Или я чего-то не понимаю.
Все верно. Застрял пока на этом. Все благополучно перемещается в Андроид (не считая артекфактов). Но главное не могу пока вкурить, как правильно прочитать последовательно секции. Есть ощущение, что не тем путем иду.

Код:
#include <GDIPlus.au3>
#include <WinAPI.au3>

Global $Height, $Width, $sIniRead
Local $hPathImage = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл изображения (*.png)')
Local $hPathSettings = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл настроек (*.ini)')
Local $hSettingsFile = FileOpen($hPathSettings, 0)
;If Not @error then MsgBox(0,'',$hPathSettings)

DirCreate(@ScriptDir & '\Screen')
; Читаем из ini-файла названия секций и созадаем три каталога:
$dirNew = IniReadSectionNames($hPathSettings)
If IsArray($dirNew) Then
    $dirAndroid = String($dirNew[1])
    DirCreate(@ScriptDir & '\Screen\' & $dirAndroid)
    $diriOS = String($dirNew[2])
    DirCreate(@ScriptDir & '\Screen\' & $diriOS)
    $dirWindows = String($dirNew[3])
    DirCreate(@ScriptDir & '\Screen\' & $dirWindows)
EndIf

While 1

    $sStringImageName = IniReadSection($hPathSettings, $dirAndroid)

    $sStringImageName = FileReadLine($hSettingsFile) ;возращаем очередную строку
    If @error = -1 Then ExitLoop ;прерываем цикл при завершении файла
    $sStringImageNameReplace = StringReplace($sStringImageName, "Image=", "") ;удаляем название параметра из имени файла

    $str = StringRegExp($sStringImageNameReplace, '([0-9]+)x([0-9]+)', 3) ;находим в строке значения высоты и ширины
    If IsArray($str) Then
        $Width = Int($str[0])
        $Height = Int($str[1])
    EndIf

    If $Width > $Height Then ;если ширина картинки больше высоты, то нужно повернуть ее на 90 градусов (наклонить влево)
        _GreatImageRotateAndResize()
    Else
        _GreatImageResize()
    EndIf

    _MoveFileDirAndroid()

WEnd

FileClose($hPathSettings)

Func _MoveFileDirAndroid()

    $sIniRead = IniReadSection($hPathSettings, $dirAndroid)

    If @error Then
        MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
    Else
        For $i = 1 To $sIniRead[0][0]
            FileMove(@ScriptDir & '\Screen\', @ScriptDir & '\Screen\' & $dirAndroid & '\') ;Перемещаем файл в директорию по имени секции
        Next
    EndIf

EndFunc   ;==>_MoveFileDirAndroid

Func _GreatImageResize()

    _GDIPlus_Startup() ;перед созданием любого объекта GDI+ необходимо вызвать _GDIPlus_Startup
    $hNewImage = _GDIPlus_ImageLoadFromFile($hPathImage) ;создаёт объект изображения на основе файла
    $hFinalImage = _GDIPlus_ImageResize($hNewImage, $Width, $Height) ;уменьшение с искажением пропорций
    _GDIPlus_ImageSaveToFile($hFinalImage, @ScriptDir & '\Screen\' & $sStringImageNameReplace) ;сохраняет изображение в файл
    _GDIPlus_ImageDispose($hFinalImage) ;освобождает измененный объект изображения
    _GDIPlus_ImageDispose($hNewImage) ;освобождает объект изображения
    _GDIPlus_Shutdown() ;очищает ресурсы используемые Microsoft Windows GDI+. Нужно избавиться от всех созданных объектов GDI+, прежде чем вызвать _GDIPlus_Shutdown

EndFunc   ;==>_GreatImageResize

Func _GreatImageRotateAndResize()

    _GDIPlus_Startup() ;перед созданием любого объекта GDI+ необходимо вызвать _GDIPlus_Startup
    $hNewImage = _GDIPlus_ImageLoadFromFile($hPathImage) ;создаёт объект изображения на основе файла
    _GDIPlus_ImageRotateFlip($hNewImage, 3) ;поворот изображения на 90 градусов влево
    $hFinalImage = _GDIPlus_ImageResize($hNewImage, $Width, $Height) ; уменьшение с искажением пропорций
    _GDIPlus_ImageSaveToFile($hFinalImage, @ScriptDir & '\Screen\' & $sStringImageNameReplace) ;сохраняет изображение в файл
    _GDIPlus_ImageDispose($hFinalImage) ;освобождает измененный объект изображения
    _GDIPlus_ImageDispose($hNewImage) ;освобождает объект изображения
    _GDIPlus_Shutdown() ;очищает ресурсы используемые Microsoft Windows GDI+. Нужно избавиться от всех созданных объектов GDI+, прежде чем вызвать _GDIPlus_Shutdown

EndFunc   ;==>_GreatImageRotateAndResize
 

Вложения

  • Settings_original.ini.txt
    1.6 КБ · Просмотры: 1

Norm

Продвинутый
Сообщения
279
Репутация
74
Не знаю на сколько это будет соответствовать реальности, но во всяком случае Вы можите это подправить
Код:
#include <GDIPlus.au3>
#include <WinAPI.au3>

Local $hPathImage = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл изображения (*.png)')
If $hPathImage <> "" Then
    Local $hPathSettings = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл настроек (*.txt; *.ini)')
    If $hPathSettings <> "" Then
        Local $nN, $nJ, $sNewPath, $aImageName, $aWHSize, $hFinalImage
        Local $dirNew = IniReadSectionNames($hPathSettings) ; Читаем из ini-файла названия секций и созадаем три каталога:
        If Not @error Then
            _GDIPlus_Startup()
            Local $hNewImage = _GDIPlus_ImageLoadFromFile($hPathImage) ;создаёт объект изображения на основе файла
            For $nN = 1 To $dirNew[0]
                $sNewPath = @ScriptDir & '\Screen\' & $dirNew[$nN]
                DirCreate($sNewPath)
                $aImageName = IniReadSection($hPathSettings, $dirNew[$nN])
                For $nJ = 1 To $aImageName[0][0]
                    $aWHSize = StringRegExp($aImageName[$nJ][1], '([0-9]+)x([0-9]+)', 3) ;находим в строке значения высоты и ширины
                    If Not @error Then
                        $aWHSize[0] = Number($aWHSize[0])
                        $aWHSize[1] = Number($aWHSize[1])
                        If $aWHSize[0] > $aWHSize[1] Then ;если ширина картинки больше высоты, то нужно повернуть ее на 90 градусов (наклонить влево)
                            _GDIPlus_ImageRotateFlip($hNewImage, 3) ;поворот изображения на 90 градусов влево
                        EndIf
                        $hFinalImage = _GDIPlus_ImageResize($hNewImage, $aWHSize[0], $aWHSize[1]) ;уменьшение с искажением пропорций
                        _GDIPlus_ImageSaveToFile($hFinalImage, $sNewPath &'\'& $aImageName[$nJ][1]) ;сохраняет изображение в файл
                        _GDIPlus_ImageDispose($hFinalImage) ;освобождает измененный объект изображения
                    Else
                        ContinueLoop
                    EndIf
                Next
            Next
            _GDIPlus_ImageDispose($hNewImage) ;освобождает объект изображения
            _GDIPlus_Shutdown()
        EndIf
    EndIf
EndIf

Сообщение автоматически объединено:

Пришлось несколько раз переделывать, поскольку очень неточно была расписана задача
Я бы начал так:
Выбираю файл PNG, далее открываю файл с настройками, в котором указаны размеры и папки, в которые эти файлы должны сохpанятся.
Далее скрипт конвертирует и сохраняет в указанные каталоги с указанными размерами. Файл настроек прилагаю.
Нужно разложить файлы по каталогам также, как они идут по порядку в этом текстовом файле.
Например: при считывании строки, я определил, что это каталог Android, значит все следующие строки относятся к нему, пока не появится строка iOS. Следующие за iOS строки относятся к ней, пока не появится строка Windows и т.д.
 
Последнее редактирование:
  • Like
Реакции: ason
Автор
A

ason

Новичок
Сообщения
25
Репутация
0
Не знаю на сколько это будет соответствовать реальности, но во всяком случае Вы можите это подправить
Код:
#include <GDIPlus.au3>
#include <WinAPI.au3>

Local $hPathImage = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл изображения (*.png)')
If $hPathImage <> "" Then
    Local $hPathSettings = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл настроек (*.txt; *.ini)')
    If $hPathSettings <> "" Then
        Local $nN, $nJ, $sNewPath, $aImageName, $aWHSize, $hFinalImage
        Local $dirNew = IniReadSectionNames($hPathSettings) ; Читаем из ini-файла названия секций и созадаем три каталога:
        If Not @error Then
            _GDIPlus_Startup()
            Local $hNewImage = _GDIPlus_ImageLoadFromFile($hPathImage) ;создаёт объект изображения на основе файла
            For $nN = 1 To $dirNew[0]
                $sNewPath = @ScriptDir & '\Screen\' & $dirNew[$nN]
                DirCreate($sNewPath)
                $aImageName = IniReadSection($hPathSettings, $dirNew[$nN])
                For $nJ = 1 To $aImageName[0][0]
                    $aWHSize = StringRegExp($aImageName[$nJ][1], '([0-9]+)x([0-9]+)', 3) ;находим в строке значения высоты и ширины
                    If Not @error Then
                        $aWHSize[0] = Number($aWHSize[0])
                        $aWHSize[1] = Number($aWHSize[1])
                        If $aWHSize[0] > $aWHSize[1] Then ;если ширина картинки больше высоты, то нужно повернуть ее на 90 градусов (наклонить влево)
                            _GDIPlus_ImageRotateFlip($hNewImage, 3) ;поворот изображения на 90 градусов влево
                        EndIf
                        $hFinalImage = _GDIPlus_ImageResize($hNewImage, $aWHSize[0], $aWHSize[1]) ;уменьшение с искажением пропорций
                        _GDIPlus_ImageSaveToFile($hFinalImage, $sNewPath &'\'& $aImageName[$nJ][1]) ;сохраняет изображение в файл
                        _GDIPlus_ImageDispose($hFinalImage) ;освобождает измененный объект изображения
                    Else
                        ContinueLoop
                    EndIf
                Next
            Next
            _GDIPlus_ImageDispose($hNewImage) ;освобождает объект изображения
            _GDIPlus_Shutdown()
        EndIf
    EndIf
EndIf

Сообщение автоматически объединено:

Пришлось несколько раз переделывать, поскольку очень неточно была расписана задача
Я бы начал так:
Выбираю файл PNG, далее открываю файл с настройками, в котором указаны размеры и папки, в которые эти файлы должны сохpанятся.
Далее скрипт конвертирует и сохраняет в указанные каталоги с указанными размерами. Файл настроек прилагаю.
Спасибо Огромное! Очень крутое решение на мой взгляд! Немного поправил ваш код, т.к. некорректно отрабатывался поворот картинки. Вот так работает безупречно.

Код:
#include <GDIPlus.au3>
#include <WinAPI.au3>

Local $hPathImage = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл изображения (*.png)')
If $hPathImage <> "" Then
    Local $hPathSettings = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Файл настроек (*.txt; *.ini)')
    If $hPathSettings <> "" Then
        Local $dirNew = IniReadSectionNames($hPathSettings) ;считываем в массив имена всех секций из ini-файла
        If Not @error Then
            For $i = 1 To $dirNew[0]
                $sNewPath = @ScriptDir & '\Screen\' & $dirNew[$i] ;считываем по счетчику из массива имя секции:
                DirCreate($sNewPath) ;созадаем директорию с именем секции:
                $aImageName = IniReadSection($hPathSettings, $dirNew[$i]) ;считываем в массив все пары (параметр=значение) в секции из ini-файла
                For $iDir = 1 To $aImageName[0][0]
                    $aWHSize = StringRegExp($aImageName[$iDir][1], '([0-9]+)x([0-9]+)', 3) ;находим в строке значения высоты и ширины
                    If Not @error Then
                        $Width = Int($aWHSize[0])
                        $Height = Int($aWHSize[1])
                        _GDIPlus_Startup() ;перед созданием любого объекта GDI+ необходимо вызвать _GDIPlus_Startup
                        Local $hNewImage = _GDIPlus_ImageLoadFromFile($hPathImage) ;создаём объект изображения на основе файла .png
                        If $Width > $Height Then ;если ширина больше высоты, тогда поворачиваем изображение на 90 градусов (влево)
                            _GDIPlus_ImageRotateFlip($hNewImage, 3) ;поворот изображения на 90 градусов влево
                        EndIf
                        $hFinalImage = _GDIPlus_ImageResize($hNewImage, $Width, $Height) ;изменяем размер изображения
                        _GDIPlus_ImageSaveToFile($hFinalImage, $sNewPath & '\' & $aImageName[$iDir][1]) ;сохраняем изображение в файл в созданную директорию
                        _GDIPlus_ImageDispose($hFinalImage) ;освобождаем измененный объект изображения
                        _GDIPlus_ImageDispose($hNewImage) ;освобождаем исходный объект изображения
                        _GDIPlus_Shutdown() ;очищает ресурсы используемые Microsoft Windows GDI+. Нужно избавиться от всех созданных объектов GDI+, прежде чем вызвать _GDIPlus_Shutdown
                    EndIf
                Next
            Next
        EndIf
    EndIf
EndIf
 
Последнее редактирование:
Верх