[ART/Манга] Набор скриптов на powershell для уменьшения веса изображений

Набор скриптов на powershell для уменьшения веса изображений
Avif, heic и webp не поддерживаются.
Есть как скрипт для пережатия с потерями из множества форматов в jpg так и скрипты для пережатия без потерь jpg/png/gif.
Список скриптов:
Скрипт Входные файлы Выходные файлы Описание
jpg_opt.ps1 Jpg, jpeg, png, bmp, tga, ppm, pnm, pgm, pbm, dib, icb, vda, vst, rle jpg Жмёт входные файлы со сравнительно малой потерей качества и большим уменьшением размера в jpg.
jpg_opt_losless.ps1 Jpg, jpeg Jpg, jpeg Перекодирует найденные jpg файлы не меняя изображение.
png_opt.ps1 Png, apng Png, apng Перебирает параметры сжатия png для получения наименьшего размера, не меняет изображение.
png_opt_slow.ps1 Png, apng Png, apng То же что и png_opt.ps1 но использует Zopfli что даёт на 2-8% лучшее сжатие но в ~100 раз более медленную работу.
png_opt_not_safe.ps1 Png, apng Png, apng То же что и png_opt.ps1 но применяет небезопасные опции сжатия которые могут помешать ряду приложений открыть файл и сломать в ряде приложений прозрачность.
png_opt_slow_not_safe.ps1 Png, apng Png, apng Комбинация png_opt_slow.ps1 и png_opt_not_safe.ps1
gif_opt_losless.ps1 gif gif Сжимает gif без потерь, после перекодирования проверяет идентичность входного и выходного файла.

Для работы необходим powershell версии 7 и выше.
Установить можно:
  1. Microsoft store https://apps.microsoft.com/detail/9mz1snwt0n5d
  2. Код:
    winget install --id Microsoft.PowerShell
  3. Msi файл с официальной страницы https://learn.microsoft.com/ru-ru/powershell/scripting/i...-the-msi-package
В теории возможна работа на linux https://learn.microsoft.com/ru-ru/powershell/scripting/i...ershell-on-linux но работоспособность скриптов там не проверялась. Как минимум потребуется изменить путь к исполняемым файлам и скорее всего вручную задавать число потоков.
Использование

подробнее

Необходимо открыть powershell в папке со скриптами, например так:

Далее запустить нужный скрипт:

Аргументы имеют следующий вид:
Код:
.\<ИмяСкрипта.ps1> "<Входной путь>" ["<выходной путь>"] [-j <число потоков>] [-AsciiTempMode]
Входной путь обязателен, в нём скрипт будет искать все типы файлов, которые может обработать.
Выходной путь не обязателен, если его задать скрипт поместит обработанные файлы туда с сохранением структуры папок. Если его не задать скрипт сохранит обработанные файлы рядом с оригинальными и предложит в конце обработки заменить оригинальные файлы на обработанные. Если и во входном пути, и в выходном задать одну папку то файлы будут перезаписаны без предупреждения.
-j ручное задание числа потоков обработки, по умолчанию используется число ядер процессора (не потоков, для процессора у которого 4 ядра 8 потоков скрипт будет использовать 4 потока).
-AsciiTempMode включает режим, в котором файл перед обработкой копируется в temp, там обрабатывается и оттуда копируется в выходную папку. Предназначено для случаев, когда путь содержит какие-то специфичные символы, из-за которых приложение для оптимизации не может взаимодействовать с файлом.
Пример работы:

Скрипт поддерживает вывод на русском и английском языке, язык меняется в зависимости от локали системы (если локаль русская, то русский иначе английский).
Любой из скриптов удаляет изображений EXIF информацию, оставляя только необходимое для отображения.
Подробнее о скриптах:

jpg_opt.ps1

Проверяет 21 комбинацию параметров кодирования MozJPEG и сохраняет наименьший файл. 21 комбинация была отобрана из всех 243 возможных комбинаций параметров кодирования. Был взят набор изображений разного типа (фото, компьютерная графика, игровые скриншоты, сканы рисунков, скриншоты из аниме) и отобрана 21 комбинация параметров, которые наиболее часто давали минимальный размер (22 по частоте комбинация встречалась сильно реже чем 21я).
Потери качества очень малы, на разных изображениях я получал отличие в 1.5-3% по метрике SSIM. При этом на jpg фотографии с фотоаппарата весом 5мб я получил итоговый размер в 1.5мб. fullhd игровые скриншоты превращаются в 150-300кб.
Есть информация что пожатые таким образом изображения фотошоп воспринимает некорректно, но если их открыть, например в паинте, и пересохранить, например в png, то после этого их спокойно можно использовать. Проблем в других приложениях не замечено.
В целом на большом наборе изображений даёт 20-70% от оригинального jpg и 2-10% от входного png.
Лично я использую чтобы сжать скриншоты в раздачах.

jpg_opt_losless.ps1

Сокращает размер jpg файла, оставляя картинку неизменной. Обычно уменьшает размер примерно на 10%.
Единственным возможным нюансом может быть то, что результирующий jpg становится прогрессивным и требует больше ресурсов процессора для декодирования.
Про Progressive JPEG https://habr.com/ru/articles/165645/
Лично я использую для пережатия вообще всех jpg, в которых не хочу потерять качество изображения. Например, во всех играх на renpy где есть jpg файлы я их перекодирую этим методом.

png_opt.ps1

png изображение представляет собой набор пикселей сжатый с помощью алгоритма deflate (тот же алгоритм который используется в zip архивах).
Этот скрипт с помощью oxipng перебирает различные параметры сжатия deflate оставляя минимальный по размеру файл.
Многопоточность в скрипте работает не оптимально, тк сам по себе oxipng для отдельного файла использует несколько потоков проверяя сразу несколько комбинаций параметров. Если функционал скрипта по помещению результата в папку, отличную от входной не нужен, а нужна оптимизация на месте, то лучше использовать функционал самого oxipng по массовой обработке файлов.
Код:
.\oxipng.exe -o max --strip safe -r "<путь>"
Запущенный в таком режиме oxipng грузит все потоки процессора попытками получить минимальный размер файла, а не обрабатывает параллельно столько файлов сколько у процессора ядер как это делает основной скрипт. Oxipng сразу заменяет все файлы в папке минимально получившимся файлом.
Я использую oxipng в таком режиме для игровых раздач, где версия игры ещё не финальная для быстрой обработки файлов.

png_opt_slow.ps1

Запускает всё тот же oxipng но уже в режиме с использованием Zopfli для кодирования.
Про Zopfli https://habr.com/ru/articles/171181/
Zopfli это попытка от гугла получить максимально возможное сжатие в рамках алгоритма deflate. Но он работает в ~100 раз медленнее чем обычный алгоритм для deflate, давая до 8% лучшее сжатие. Те условно если обычный алгоритм дал на 27% более маленький файл, то Zopfli в теории может сделать это же файл на 29% меньше от оригинального. Для примера на наборе из 1500 png файлов общим весом в 800мб в обычном режиме у меня oxipng работал 7 минут, а в режиме Zopfli почти 8 часов на 14600kf.
Команда для использования oxipng без скрипта:
Код:
.\oxipng.exe -o max --strip safe --zopfli -r "<путь>"
Zopfli никак не мешает декодированию файла, даже приложения из 90x будут спокойно открывать файлы, закодированные с помощью Zopfli.
Я использую этот режим только в раздачах с финальной версией, которые в дальнейшем не планирую менять.

png_opt_not_safe.ps1 и png_opt_slow_not_safe.ps1

Добавляет к аргументам oxipng
--strip all
и
--alpha
--strip all удаляет все метаданные, которые не являются необходимыми для декодирования картинки. Может сильно уменьшить и так маленькие изображения, вклад в уменьшение больших изображений незначительный. Часть приложений могут не декодировать картинку после этого изменения.
--alpha может улучшить сжатие для изображений, имеющих прозрачный фон, но в части приложений ломает прозрачность. Технически является сжатием с потерями.
Команды oxipng:
Код:
.\oxipng.exe -o max --strip all --alpha -r "<путь>"
и
Код:
.\oxipng.exe -o max --strip all --alpha --zopfli -r "<путь>"
С целью сохранения совместимости и не желая выяснять где такой способ сжатия заработает а где нет я не использую данные скрипты.

gif_opt_losless.ps1

GIF является довольно примитивным форматом и оставляет мало места для улучшения сжатия без потерь. В целом если гифка была сделана нормально, то даже старые гифки 90х-00х находятся почти на пике сжатия и из них можно выжать максимум пару процентов. Но бывает, что гифка сделана плохо (каждый кадр закодирован полностью, а не разницей пикселей от предыдущего кадра) и тогда можно увидеть существенное уменьшение размера, например получить из 12мб 4мб.
Где нахожу гифки пережимаю и иногда даже встречаются плохо сделанные.
Возможные проблемы с запуском:

подробнее

Windows может заблокировать запуск скрипта тк на нём есть метка скачан из интернета. В таком случае надо разблокировать все скрипты в том числе Core.

Чаще всего в windows по умолчанию запрещено выполнение скриптов без электронной подписи.
Можно разрешить запускать локальные скрипты в настройках windows

Или в powershell запущенном от администратора:
Код:
Set-ExecutionPolicy RemoteSigned
Репозиторий на гитхаб.

Ссылки откуда при необходимости можно обновить exe

MozJPEG
oxipng
Gifsicle
Также я сделал скрипты которые позволяют оптимизировать картинки внутри электронных книг в формате fb2 и epub. Не стал включать их в раздачу, достаточно положить их в ту же папку где лежат остальные скрипты. Ссылка на репозиторий. Эти скрипты используют jpg_opt_losless.ps1, png_opt.ps1 и gif_opt_losless.ps1.
Show All Tags

Free Sex Videos on Porn2Best ! Enter now!

you ready to spice up your adult entertainment experience? Look no further than Porn2Best! Get ready to explore the best free adult torrent that will leave you coming back for more. Whether you're into diversity, HD quality, or just want to download new content all the time, Porn2Best has got you covered. Let's dive in and discover the ultimate destination for your naughty pleasures!

Porn2Best

At Porn2Best, diversity is where it's at. No matter what your preferences or kinks may be, you're sure to find something that tickles your fancy on this platform. From different body types to a wide range of sexual activities, there's no shortage of variety when it comes to adult videos here. Explore a world of endless possibilities and discover new genres that you never knew existed. With content catering to all tastes and desires, you can truly indulge in whatever gets you going without judgment or limitations. Embrace the beauty of individuality as you navigate through a plethora of options that celebrate diversity in all its forms. Whether you're into classic scenes or more niche selections, Porn2Best offers a smorgasbord of choices to satisfy every craving.

Porn2Best

Are you tired of grainy, low-quality adult videos that leave you squinting at the screen? Say goodbye to pixelated images and blurry scenes because on Porn2Best, it's all about HD quality. Immerse yourself in crystal-clear visuals that bring every detail to life. From the glisten of sweat on skin to the twinkle in their eyes, HD takes your viewing experience to a whole new level. Once you experience adult videos in HD on Porn2Best, there's no turning back. The sharpness and clarity will make you feel like you're right there in the moment. Get ready to fall in love with high-definition adult content like never before. Don't settle for anything less than perfection when it comes to your viewing pleasure. Upgrade your experience with HD videos on Porn2Best and see why quality matters more than ever before.

Watch New HD Videos All the Fucking Time

So what are you waiting for? Dive into the world of Porn2Best and explore the best free adult videos on offer. With a diverse range of content, high-definition videos, and new releases all the time, there's something for everyone to enjoy. Whether you're into a specific niche or just want to discover something new, Porn2Best has got you covered. Don't miss out on the ultimate adult entertainment experience - enter now!