Автор Тема: Как уменьшить размер (объём) скриншота в байтах  (Прочитано 388 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Alex-on-777

  • Зашел в гости
  • *
  • Сообщений: 2
    • Просмотр профиля
Доброго времени суток! Искал на форуме, не нашёл (если что, извиняйте)).
Суть в следующем:
Делаю порядка 10 000 скриншотов через: SCREENSHOTEX(11,174,1167,736, "file",1) - формат jpeg - получается плохое рарешение (по190 КБ);
Если делаю через SCREENSHOTEX(11,174,1167,736, "file",0) - формат bmp - разрешение получается хорошее, но каждый скрин весит 3 МБ;
Возможно ли как-то получить скрин размером 400 - 600 КБ ?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3756
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Как уменьшить размер (объём) скриншота в байтах
« Ответ #1 : Сентябрь 24, 2021, 12:16:59 pm »
"Разрешение" такое же.

Смотря для каких тебе целей. Если не использовать потом этот скрин для кликера, сохраняй в jpeg
Качество можно выставить в data\config.ini  параметр sshot_jpeg_quality
Ставь 100. Но это всё равно будет сжатие с потерями.



Если нужны скрины без потерь, например выловить редкий шаблон для нарезки заготовки под поиск, то можно сторонними утилитами по расписанию переводить все bmp в папке в png или архивировать архиватором, с удалением bmp-шек.
Вот, например, через cmd

Прям в скрипте можно поставить раз в определённое время сжимать скрины в архив
Код: Clickermann
  1. $7zip = STRCONCAT(CHAR(34), "C:\Program Files\7-Zip\7z.exe", CHAR(34))
  2. $curdatetime = "%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%"
  3.  
  4. EXECUTE("cmd.exe", STRCONCAT("/C cd screens && ", $7zip, " a -mx5 -sdel -y -mmt=4 archive_", $curdatetime, ".7z *.bmp"))

В папке со скринами будут появляться архивы вида "archive_2021-09-24_11-20-54.7z"


Можно и через планировщик задач запускать cmd
https://yadi.sk/d/woeNbfDtIS8qow


Минус архивации - сброс счётчика скринов, т.к. скрины мы удаляем. После архивации счётчик начинается сначала. Если это критично, можно скрины нумеровать самому.
Вот скрипт нумерующий скрины на каждый запуск скрипта. Новый запуск - новая нумерация и новый пополняющийся единый архив на весь запуск.
Код: Clickermann
  1. // подпрограмма делающая скриншоты со своей нумерацией
  2. SUB(screen)
  3.    DEFINE($screen_num, 1)
  4.    SCREENSHOTFIX(11,174,1167,736, STRCONCAT("screens\file_", $screen_num, ".bmp"), 0)
  5.    INC($screen_num)
  6. END_SUB
  7.  
  8. // делаем 3 тестовых скрина
  9. SUB(test_screen)
  10.    FOR($i=0, $i < 3)
  11.        screen()
  12.        WAIT(1)
  13.    END_CYC
  14. END_SUB
  15. //==============================================================================
  16.  
  17. // один раз создаём переменные
  18. IF($repeatedly = 0)
  19.    $repeatedly = 1
  20.    $7zip = STRCONCAT(CHAR(34), "C:\Program Files\7-Zip\7z.exe", CHAR(34))
  21.    $curdatetime = STRCONCAT($_date_y, ".", STRCUT($_date_str, 4, 2), ".", STRCUT($_date_str, 1, 2), "_", $_time_str)
  22.    $curdatetime = STRREPLACE($curdatetime, ":", ".")
  23. $curdatetime = STRREPLACE($curdatetime, ":", ".")
  24. END_IF
  25.  
  26.  
  27. test_screen()
  28. // архивируем скрины не заархивированные на данный момент
  29. EXECUTE("cmd.exe", STRCONCAT("/C cd screens &&", $7zip, " a -mx5 -sdel -y -mmt=4 archive_", $curdatetime, ".7z *.bmp"))
  30.  
  31.  
  32. test_screen()
  33. // архивируем скрины не заархивированные на данный момент
  34. EXECUTE("cmd.exe", STRCONCAT("/C cd screens &&", $7zip, " a -mx5 -sdel -y -mmt=4 archive_", $curdatetime, ".7z *.bmp"))
  35.  
  36. HALT


Alex-on-777

  • Зашел в гости
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Как уменьшить размер (объём) скриншота в байтах
« Ответ #2 : Сентябрь 25, 2021, 10:55:12 am »
Спасибо за инфу (в том числе про архивацию) - пригодится.
Я потом через FINEREADER делаю распознование текста. Нет такого параметра как sshot_bmp_quality или sshot_png_quality ? (поставил 100 в sshot_jpeg_quality (было 90) - на распознование в FINEREADER не повлияло (распознаёт корректно только 80-90%). Через BMP или PNG распознование 100% (цифровой текст типа 1.23-56-85)


Ivankak

  • Освоившийся
  • **
  • Сообщений: 37
    • Просмотр профиля
Re: Как уменьшить размер (объём) скриншота в байтах
« Ответ #3 : Сентябрь 26, 2021, 12:03:50 am »
Если jpg не подходит по качеству, то можно попробовать tiff с компрессией. У него встроенная zip и lzw без потерь.  можешь получить уменьшение до 2 раз.
Размер компрессии без потерь всегда сильно зависит от содержимого картинки. Судя по тому, что у тебя такая мелкая картинка имеет размер 3 мега, у тебя либо много мелких деталей (очень мелкий шрифт) либо шумы.
Попробуй ffmpeg для конвертации, можно прямо из кликермана запускать его и в командной строке ему все параметры передать.
 логика такая:
сохраняешь png
вызываешь внешнюю программу ffmpeg и конвертируешь ей файл в tiff
удаляешь png

тут про конвертацию
https://superuser.com/questions/827606/use-ffmpeg-for-jpeg-to-tiff-conversion

Если у тебя чб текст, что можно палитру в grayscale конвертировать и\или сохранять в png-8 (оптимизированная палитра 256 (или 128 или 64 цветов), это может дать уменьшение в 2 раза, а распознавание не ухудшиться.

Если из кликермана запускать ffmpeg не удобно, то сначала сохраняешь свои скриншоты, а потом все групповым образом конвертируешь.
можно фотошопом в пакетном режиме, можно Faststoun или ffmpeg испоьзовать, что сподручнее.

« Последнее редактирование: Сентябрь 26, 2021, 09:52:20 am от Ivankak »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3756
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Как уменьшить размер (объём) скриншота в байтах
« Ответ #4 : Сентябрь 27, 2021, 09:24:32 am »
Я потом через FINEREADER делаю распознование текста. Нет такого параметра как sshot_bmp_quality или sshot_png_quality ? (поставил 100 в sshot_jpeg_quality (было 90) - на распознование в FINEREADER не повлияло (распознаёт корректно только 80-90%). Через BMP или PNG распознование 100% (цифровой текст типа 1.23-56-85)
Чёт странный какой-то finereader. Сто лет назад, когда я им пользовался в ручном режиме, да он не любил jpeg но неужели сейчас при хорошем качестве это так для него важно.

(поставил 100 в sshot_jpeg_quality (было 90) - на распознование в FINEREADER не повлияло
После изменения параметра кликер перезапускал? Он читает эти параметры только при запуске. Проверял с размером файла, изменился?
sshot_jpeg_quality=100 конечно тоже сжатие с потерями, но на распознавание не должно влиять. Артефактов там нет.

« Последнее редактирование: Сентябрь 27, 2021, 09:34:29 am от Vint »