Помощь - Поиск - Пользователи - Календарь
Полная версия: размер фото
UoKit.com Форумы > Кликер > UO Pilot
portos
есть скрипт

script
Код
set $path1 "D:\3"  // папка, в которой папки с картинками
set $path2 "D:\2"

dir (%result $path2)     // найти все файлы в папке
for #i 1 size(%result)
    filedelete (%result[#i 1])    // удалить
end_for

dir (%result2 $path1 "*.*" norecursion)   // найти все папки

set $path3 %result2 [1 1]
dir (%result3 $path3)     // найти все файлы в папке

set %a[1 1] $path1
set %a[1 2] "\"
set %a[1 3] %result2[1 3]
set %a[1 4] "\"
set %a[1 5] %result3[1 3]%result3[1 4]

set %a[2 1] $path2
set %a[2 2] "\"
set %a[2 3] %result3[1 3] %result3[1 4]

set $s1 %a[1]
set $s2 %a[2]

filecopy ($s1 $s2)      // скопировать файл
filedelete (%result3[1 1])  // удалить файл
if  size(%result3) = 1 or size(%result3) = 0  // если в папке был 1 файл или папка пустая, то удалить папку
    init_arr %a (3) $path1 \ %result2[1 3]
    DirRemove (%a[3])  // удалить папку
end_if

можно ли сделать так ,чтобы брало фото опредедёного размера (от 100 например),а потом удаляло папку

---
См. правило 1.18
cirus
Цитата
чтобы брало фото опредедёного размера (от 100 например)

Какой формат картинок? 100 чего? Пикселей по ширине, высоте?
portos
Цитата(cirus @ 2.9.2020, 23:20) *

Какой формат картинок? 100 чего? Пикселей по ширине, высоте?


пикселей ,но можно и по другим параметрам , главное что бы маленькие отсеевать ,а нормальные использовать
cirus
Какой формат у картинок?
portos
Цитата(cirus @ 3.9.2020, 0:07) *

Какой формат у картинок?


jpg ,например : image_062.jpg - использовать ,image_004.jpg -удалять
cirus
Узнать ширину и высоту изображения
Код
--lua
local ffi = require('ffi')
local gdip = ffi.load('Gdiplus.dll')
local CP_ACP = 0

ffi.cdef[[
typedef unsigned int  UINT;
typedef unsigned long DWORD;
typedef struct {UINT GdiplusVersion; int DebugEventCallback; bool SuppressBackgroundThread; bool SuppressExternalCodecs;} GdiplusStartupInput, *pGdiplusStartupInput;

int GdiplusStartup(int *token, pGdiplusStartupInput GdiplusStartupInput, int *output);
int GdiplusShutdown(int token);
int GdipDisposeImage(int image);
int GdipLoadImageFromFile(const wchar_t *filename, int *image);
int GdipGetImageWidth(int image, UINT *width);
int GdipGetImageHeight(int image, UINT *height);
int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, const char *lpMultiByteStr, int cbMultiByte, wchar_t *lpWideCharStr, int cchWideChar);
]]

function image_size(path)
    local buf = ffi.new('wchar_t[?]', #path+1)
    local StartupInput = ffi.new('GdiplusStartupInput', {1, 0, 0, 0})
    local token, image, w, h = ffi.new('int[1]'), ffi.new('int[1]'), ffi.new('int[1]'), ffi.new('int[1]')
    ffi.C.MultiByteToWideChar(CP_ACP, 0, path, #path, buf, ffi.sizeof(buf))
    gdip.GdiplusStartup(token, StartupInput, nil)
    gdip.GdipLoadImageFromFile(buf, image)
    gdip.GdipGetImageWidth(image[0], w)
    gdip.GdipGetImageHeight(image[0], h)
    gdip.GdipDisposeImage(image[0])
    gdip.GdiplusShutdown(token[0])
    return w[0], h[0]
end

log "clear" log "mode compact"

local path = [[C:\image_062.jpg]]  -- путь к картинке (возможные форматы: BMP, JPG, TIF, GIF и PNG)
local width, height = image_size( path )
log(width, height)  -- размеры картинки

if width > 100 and height > 100 then
    log('Размеры картинки больше 100')
else
   log('Размеры картинки меньше 100')
end
portos
спасибо за помощь ,но это совсем не то . lua не использую
а такое возможно на нормальном uopilot ?
Fors1k
Цитата(portos @ 3.9.2020, 5:47) *
а такое возможно на нормальном uopilot ?

Нет, поэтому его больше и не используют.
Посмотрите, здесь есть вся информация как начать писать скрипты. Обращайтесь, если появятся вопросы.

Опишите полностью задачу пошагово, и тогда вам смогут помочь с написанием скрипта.
Нужно просто скопировать все картинки из "D:\3" в "D:\2", которые больше 100х100px?

Узнать ширину и высоту изображения:
Код
--lua
require"luaposh";PScode('return',{[[#}
#
$image = [Drawing.Image]::FromFile("C:\myImg.jpg")
log $image.size; $image.Dispose()
#
]]})
portos
можно на lua сделать:

в папке D\3 находятся папки с фото,нужно оставить только файлы jpg которые больше 100х100 пикс
cirus
Цитата
в папке D\3 находятся папки с фото,нужно оставить только файлы jpg которые больше 100х100 пикс

код
Код
--lua
local ffi = require('ffi')
local gdip = ffi.load('Gdiplus.dll')
local CP_ACP = 0

ffi.cdef[[
typedef unsigned int  UINT;
typedef unsigned long DWORD;
typedef struct {UINT GdiplusVersion; int DebugEventCallback; bool SuppressBackgroundThread; bool SuppressExternalCodecs;} GdiplusStartupInput, *pGdiplusStartupInput;

bool DeleteFileA(const char *lpFileName);
int GdiplusStartup(int *token, pGdiplusStartupInput GdiplusStartupInput, int *output);
int GdiplusShutdown(int token);
int GdipDisposeImage(int image);
int GdipLoadImageFromFile(const wchar_t *filename, int *image);
int GdipGetImageWidth(int image, UINT *width);
int GdipGetImageHeight(int image, UINT *height);
int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, const char *lpMultiByteStr, int cbMultiByte, wchar_t *lpWideCharStr, int cchWideChar);
]]

function image_size(path)
    local buf = ffi.new('wchar_t[?]', #path+1)
    local StartupInput = ffi.new('GdiplusStartupInput', {1, 0, 0, 0})
    local token, image, w, h = ffi.new('int[1]'), ffi.new('int[1]'), ffi.new('int[1]'), ffi.new('int[1]')
    ffi.C.MultiByteToWideChar(CP_ACP, 0, path, #path, buf, ffi.sizeof(buf))
    gdip.GdiplusStartup(token, StartupInput, nil)
    gdip.GdipLoadImageFromFile(buf, image)
    gdip.GdipGetImageWidth(image[0], w)
    gdip.GdipGetImageHeight(image[0], h)
    gdip.GdipDisposeImage(image[0])
    gdip.GdiplusShutdown(token[0])
    return w[0], h[0]
end

log 'clear' log 'mode compact'

local path = [[D:\3]]      -- путь к папке

local resultarray, count = dir (path, "*.bmp;*.jpg", "norecursion")  -- получить список всех файлов в формате bmp и jpg
log ("Найдено файлов: " .. count)
if count then      -- если файлы найдены
    for i=1, #resultarray do
        local width, height = image_size( resultarray[i][1] )
        log(resultarray[i][1].. '\tШирина: ' .. tostring(width) .. '\t'.. 'Высота: ' .. tostring(height))  -- размеры картинки
        if width < 100 and height < 100 then   -- если ширина и высота меньше 100
            ffi.C.DeleteFileA( resultarray[i][1] )  -- удалить файл
        end
    end
end
portos
не работает ,пишет - найдено файлов 0
работает если в папке только фото ,но если в папке D\3 папки с фото пишет - найдено файлов 0
Fors1k
Цитата(portos @ 3.9.2020, 14:41) *

в папке D\3 находятся папки с фото
нужно оставить только файлы jpg которые больше 100х100 пикс

Код
--lua
require"luaposh";PScode('void',{[[#}
#
$path = 'D:\3'
function Check-PicSize($p){#}
    $img = [Drawing.Image]::FromFile( $p.fullname )
    if($img.width -gt 100 -and $img.Height -gt 100)
    {$img.Dispose(); $true}else{$img.Dispose(); $false}
}
gci $path -file -rec|%{#}
    if(!($_.Extension -eq '.jpg' -and (Check-PicSize $_)))
    {ri $_.FullName}
}
#
]]})
portos
выбивает ошибку

code

Найдено файлов: 42
D:\4\getTheme.jpg Ширина: 1730 Высота: 320
D:\4\image.jpg Ширина: 64 Высота: 64
D:\4\image_001.jpg Ширина: 64 Высота: 64
D:\4\image_002.jpg Ширина: 64 Высота: 64
D:\4\image_003.jpg Ширина: 64 Высота: 64
D:\4\image_004.jpg Ширина: 64 Высота: 64
D:\4\image_005.jpg Ширина: 64 Высота: 64
D:\4\image_006.jpg Ширина: 64 Высота: 64
D:\4\image_007.jpg Ширина: 64 Высота: 64
D:\4\image_008.jpg Ширина: 64 Высота: 64
D:\4\image_009.jpg Ширина: 64 Высота: 64
D:\4\image_010.jpg Ширина: 64 Высота: 64
D:\4\image_011.jpg Ширина: 64 Высота: 64
D:\4\image_012.jpg Ширина: 64 Высота: 64
D:\4\image_013.jpg Ширина: 64 Высота: 64
D:\4\image_014.jpg Ширина: 64 Высота: 64
D:\4\image_015.jpg Ширина: 64 Высота: 64
D:\4\image_016.jpg Ширина: 64 Высота: 64
D:\4\image_017.jpg Ширина: 64 Высота: 64
D:\4\image_018.jpg Ширина: 64 Высота: 64
D:\4\image_019.jpg Ширина: 64 Высота: 64
D:\4\image_020.jpg Ширина: 64 Высота: 64
D:\4\image_021.jpg Ширина: 64 Высота: 64
D:\4\image_022.jpg Ширина: 64 Высота: 64
D:\4\image_023.jpg Ширина: 64 Высота: 64
D:\4\image_024.jpg Ширина: 64 Высота: 64
D:\4\image_025.jpg Ширина: 64 Высота: 64
D:\4\image_026.jpg Ширина: 229 Высота: 229
D:\4\image_027.jpg Ширина: 229 Высота: 229
D:\4\image_028.jpg Ширина: 229 Высота: 229
D:\4\image_029.jpg Ширина: 229 Высота: 229
D:\4\image_030.jpg Ширина: 229 Высота: 229
D:\4\image_031.jpg Ширина: 229 Высота: 229
D:\4\image_032.jpg Ширина: 229 Высота: 229
D:\4\image_033.jpg Ширина: 229 Высота: 229
D:\4\image_034.jpg Ширина: 229 Высота: 229
D:\4\image_035.jpg Ширина: 229 Высота: 229
D:\4\image_036.jpg Ширина: 229 Высота: 229
D:\4\image_037.jpg Ширина: 229 Высота: 229
D:\4\image_038.jpg Ширина: 229 Высота: 229
D:\4\image_039.jpg Ширина: 229 Высота: 229
D:\4\image_040.jpg Ширина: 229 Высота: 229
a runtime error.
2: module 'luaposh' not found:
no field package.preload['luaposh']
no file '.\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh\init.lua'
no file
a runtime error.
2: module 'luaposh' not found:
no field package.preload['luaposh']
no file '.\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh\init.lua'
no file
a runtime error.
2: module 'luaposh' not found:
no field package.preload['luaposh']
no file '.\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh\init.lua'
no file
a runtime error.
2: module 'luaposh' not found:
no field package.preload['luaposh']
no file '.\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh\init.lua'
no file
a runtime error.
2: module 'luaposh' not found:
no field package.preload['luaposh']
no file '.\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh.lua'
no file 'C:\Users\portos\Downloads\lua\luaposh\init.lua'
no file


Fors1k
Цитата(portos @ 4.9.2020, 0:27) *

выбивает ошибку

Скачайте здесь архив и распакуйте.
portos
поэтому и не использую lua,много проблем с ним... спасибо за помощь
Fors1k
Цитата(portos @ 4.9.2020, 0:44) *

поэтому и не использую lua,много проблем с ним.

Это называется не проблемы с языком, а знакомство с чем-то новым.
Цитата(portos @ 4.9.2020, 0:44) *

спасибо за помощь

Скрипт заработал?
portos
нет ,не работает . когда ты 6 лет работаешь с одним языком ,и потом тебе предлагают альтернативу ,тяжело перестроиться . надо сделать на сайте отдельные темы по uopilot и lua . провести опрос на сайте ,не думаю что все перешли на lua. но спасибо вам парни ,всегда помогаете с вопросами ,это лучшее качество сайта
Fors1k
Цитата(portos @ 4.9.2020, 1:00) *

когда ты 6 лет работаешь с одним языком ,и потом тебе предлагают альтернативу

Когда-то люди ездили на лошадях, а потом пересели на автомобили. Альтернатива и шаг вперед - разные вещи)
Цитата(portos @ 4.9.2020, 1:00) *

нет ,не работает.

Какая теперь ошибка?
cirus
Цитата
работает если в папке только фото ,но если в папке D\3 папки с фото пишет - найдено файлов 0

Всего-то надо убрать "norecursion" в dir.
код
Код
--lua
local ffi = require('ffi')
local gdip = ffi.load('Gdiplus.dll')
local CP_ACP = 0

ffi.cdef[[
typedef unsigned int  UINT;
typedef unsigned long DWORD;
typedef struct {UINT GdiplusVersion; int DebugEventCallback; bool SuppressBackgroundThread; bool SuppressExternalCodecs;} GdiplusStartupInput, *pGdiplusStartupInput;

bool DeleteFileA(const char *lpFileName);
int GdiplusStartup(int *token, pGdiplusStartupInput GdiplusStartupInput, int *output);
int GdiplusShutdown(int token);
int GdipDisposeImage(int image);
int GdipLoadImageFromFile(const wchar_t *filename, int *image);
int GdipGetImageWidth(int image, UINT *width);
int GdipGetImageHeight(int image, UINT *height);
int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, const char *lpMultiByteStr, int cbMultiByte, wchar_t *lpWideCharStr, int cchWideChar);
]]

function image_size(path)
    local buf = ffi.new('wchar_t[?]', #path+1)
    local StartupInput = ffi.new('GdiplusStartupInput', {1, 0, 0, 0})
    local token, image, w, h = ffi.new('int[1]'), ffi.new('int[1]'), ffi.new('int[1]'), ffi.new('int[1]')
    ffi.C.MultiByteToWideChar(CP_ACP, 0, path, #path, buf, ffi.sizeof(buf))
    gdip.GdiplusStartup(token, StartupInput, nil)
    gdip.GdipLoadImageFromFile(buf, image)
    gdip.GdipGetImageWidth(image[0], w)
    gdip.GdipGetImageHeight(image[0], h)
    gdip.GdipDisposeImage(image[0])
    gdip.GdiplusShutdown(token[0])
    return w[0], h[0]
end

log 'clear' log 'mode compact'

local path = [[D:\3]]      -- путь к папке

local resultarray, count = dir (path, "*.bmp;*.jpg")  -- получить список всех файлов в формате bmp и jpg
log ("Найдено файлов: " .. count)
if count then      -- если файлы найдены
    for i=1, #resultarray do
        local width, height = image_size( resultarray[i][1] )
        log(resultarray[i][1].. '\tШирина: ' .. tostring(width) .. '\t'.. 'Высота: ' .. tostring(height))  -- размеры картинки
        if width < 100 and height < 100 then   -- если ширина и высота меньше 100
            ffi.C.DeleteFileA( resultarray[i][1] )  -- удалить файл
        end
    end
end

Цитата
поэтому и не использую lua,много проблем с ним

Это с языком пилота много проблем, поэтому и был переход на луа.

portos
так работает супер, спасибо вам за помощь
насчёт пилота ,не соглашусь ,6 лет работают скрипты на нём ,вообще проблем нет.
пилот облегчил мою хизнь на 50 % , не обижайте его ))
спасибо парни ,так работет отлично
portos
как изменить скрипт ,что бы в папке оставались только файлы jpg . так как скрипт оставляет фото правильного размера ,но и остаются файлы с другими расширениями. если можно изменить скрипт что бы лишнее файлы так же удалялись
Fors1k
Цитата(portos @ 19.12.2020, 3:19) *

скрипт оставляет фото правильного размера ,но и остаются файлы с другими расширениями

Этот скрипт оставляет только файлы jpg, которые больше, чем 100х100. Все остальные файлы удаляются.
portos
Цитата(Fors1k @ 19.12.2020, 3:00) *

Этот скрипт оставляет только файлы jpg, которые больше, чем 100х100. Все остальные файлы удаляются.


не знаю почему ,но выдаёт ошибку
portos
не работает
cirus
Цитата
как изменить скрипт ,что бы в папке оставались только файлы jpg

Добавить в конец скрипта:
Код
local resultarray, count = dir (path, "*.?*")  -- получить список всех файлов
log ("Найдено файлов: " .. tostring(count))
if count then      -- если файлы найдены
    for i=1, #resultarray do
        if  resultarray[i][4] ~= '.jpg' then     -- если не jpg
            log('Удаление файла: ' .. resultarray[i][1])
            ffi.C.DeleteFileA( resultarray[i][1] )  -- удалить файл
        end
    end
end
portos
работает ,огромное спасибо ... С наступающими праздниками Вас
portos
подскажите , сделал два скрипта
1. берёт фото с папки, в которой папки с картинками (3).удаляет фото и если папка становиться пустой удаляет её. потом создаёт в папке (2) новую папку и перемещает в неё 16 фото ,создаёт след. папку и перемещает в неё 16 фото и так пока папка (3) будет пустой

1 скрипт

set linedelay 0

set $p 0
set $h $p
set #h string_digits($h)
set #t #h + 1 // имя первой папки

:rrr

dircreate ("D:\2\#t") // cоздаём папку ,куда будем перемещать фото

repeat 16 // перемещаем 16 фото

set $path1 "D:\3" // папка, в которой папки с картинками
set $path2 "D:\2\#t" // папка ,куда будем перемещать фото

dir (%result $path2) // найти все файлы в папке

dir (%result2 $path1 "*.*" norecursion) // найти все папки

set $path3 %result2 [1 1]
dir (%result3 $path3) // найти все файлы в папке

set %a[1 1] $path1
set %a[1 2] "\"
set %a[1 3] %result2[1 3]
set %a[1 4] "\"
set %a[1 5] %result3[1 3]%result3[1 4]

set %a[2 1] $path2
set %a[2 2] "\"
set %a[2 3] %result3[1 3] %result3[1 4]

set $s1 %a[1]
set $s2 %a[2]

filecopy ($s1 $s2) // скопировать файл
filedelete (%result3[1 1]) // удалить файл
if size(%result3) = 1 or size(%result3) = 0 // если в папке был 1 файл или папка пустая, то удалить папку
init_arr %ax (3) $path1 \ %result2[1 3]
DirRemove (%ax[3]) // удалить папку
end_if

end_repeat

set #t #t + 1 // следущая папка будет имя + 1

goto rrr


2. Создаёт папку с именем Photo в каждой папке, созданной первым скриптом

2 скрипт

set linedelay 0

dir (%result3 D:\2)
log Найдено файлов и папок: errorlevel
if size(%result3) > 0
for #i 1 size(%result3) // цикл для вывода пути всех найденных файлов в лог
set %a [1] %result3 [#i 1]
dircreate ("%a[1]\Photo")

end_for
end_if

end_script


что нужно добавить ,чтобы второй скрипт копировал одно фото с папки в созданную папку Photo (одно из 16 ,желательно не первую )


Fors1k
portos, какая разрядность у вашей операционной системы? х32 или х64?
portos
Цитата(Fors1k @ 21.12.2020, 20:14) *

portos, какая разрядность у вашей операционной системы? х32 или х64?

64
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.