Пакетное скругление картинок v0.1
Неожиданно тема пакетного скругления картинок оказалась близка не только мне. В комментариях накидали несколько предложений по улучшению программы.
Я постарался выполнить всё то, что смог добавить за вечер.
Во-первых, изменился способ запуска программы, теперь у программы есть ключи. Их имена и значения выводятся при запуске программы (если ключи не указать, то используются их значения по-умолчанию):
--quality=85 --radius=10 —background=#ffffff --mask=*.{j,J}{p,P}{g,G} --out-dir=out
Во-вторых, у программа может использовать файл установок (если он существует), там перечисляются все те же ключи (только без двух минусов) в формате INI-файла, файл должен называться «makecorner.ini».
GUI за вечер, конечно же, я не прикручу, а с сохранением EXIF есть сложности: на деле оказалось, что EXIF не то вырезается, он просто не сохраняется библиотекой GD, буду думать.
Скачать новую версию можно там же, где и предыдущую.
Бывает у них и расширение jpeg.
Как вариант
http://pel.sourceforge.net/
http://www.phpclasses.org/package/1042-PHP-EXIF-information-reader-and-writer.html
Евгений, спасибо. Новая версия неплоха, ждем конечно GUI.
Комментарий для SiMM:
В чём сложность? --mask=*.{j,J}{p,P}{e,E,}{g,G}
Комментарий для SiMM:
Я смотрел. Они монструозны — сотни килобайт, я перед сном придумал как это сделать в несколько строк.
Комментарий для Евгения Степанищева:
Подумал, что описан набор возможных значений :) А что ж скобки не квадратные, да и запятая ни к чему — больше было бы похоже на PCRE :)
Комментарий для Евгения Степанищева:
Было бы любопытно взглянуть — полагаю, достаточно знания спецификации — тупо скопировать в выходной файл EXIF входного.
Комментарий для SiMM:
Потому что это не PCRE, а file patterns, принятые в Linux/UNIX.
Комментарий для SiMM:
После обработки jpegtran получаются два файла (jpegtran так работает), сейчас я первый (входной) удаляю, а второй (выходной) переношу на место первого.
А можно делать так — копировать чанками (в JPEG есть просто выделяемые секции), сразу после заголовка подселить APP0 и APP1 (ещё толком не читал, но кажется именно там сидит EXIF, эти секции нам даст функция getimagesize в PHP), собственный APPx пропустить, а потом просто докопировать остаток.
Комментарий для Евгения Степанищева:
я как-то тестировал jpegtran и не догнал, как она использует свои описанные ключи.
И пустой ключ, и «-optimize», и «-progressive» удаляют EXIF.
Какой-нить ключ разве есть?
Если это «-copy all», то тогда в этой утилите нельзя использовать -optimize и -progressive, иначе применится -progressive. Последние ключи в порадке хелпа jpegtran имеют бОльший приоритет.
По идее, надо предусмотреть обработку jpeg, с именами, начинающимися с одного минуса =)
А так, хотелось бы иметь возможность использовать радиус ноль (например, когда я хочу только jpegtran -progressive, но с сохранением EXIF) и ключ --subdirs
jpegtran когда оборачивал в php, моя задача была обработать ещё и поддиректории.
Вот такие у обёртки параметры по умолчанию
set subdirs=+
set size_priority=+
set lowercase=-
set save_originals=-
set originals_in_each_dir=+
Главное отличие — я заменяю файлы в текущей директории, а не кладу их в out, может это и не кошерно, зато сохраняю оригиналы в случае надобности (save_originals=-) и вообще это нужно было для обработки папок сайтов!
Последний параметр понадобился, чтобы не решать, строить ли дерево поддиректорий с оригиналами в одной папке, либо в каждой обрабатываемой подпапке создавать папку «[originals]» с оригиналами.
Комментарий для Евгения Степанищева:
в догонку.
Ключ size_priority=+
действует так.
Во временной папке создаются 3 файла утилитой jpegtran — с ключами
$param=array(
’’,
’ -optimize’,
’ -progressive’,
);
и выбирается наименьший по размеру.
Утилита отчитывается — в большинстве случаев побеждает -progressive, иногда достаточно -optimize.
Ещё в информационном пространстве Земли существует потребность из EXIF стирать только программу редактирования =) но при этом чтобы не трогались всякие гео-координаты.
Комментарий для indeec17:
накосячил в комментарии 10: В абзаце с буквы «Г», в скобках после «сохраняю оригиналы в случае надобности» должен быть «+»
Комментарий для indeec17:
Два раза перечитал как-то не уверен, что понял какие предложения по улучшению содержатся в данных комментариях :)
Комментарий для Евгения Степанищева:
Да, кстати, а ширина картинки есть в ключах?
Комментарий для Евгения Степанищева:
Не получается запустить с ключами:
makecorner --quality=99 400 --radius=40 --background=#ffcccc
вылетает с ошибкой: «память не может быть read». В папке out появляются файлы jpegtran.cmd и exe.
Дико извиняюсь — версию нормально не скачал. Все увидел, сорри
Спасибо. Просьба по возможности добавить возможность понимать расширение JPG (capital letters).
Комментарий для Евгения Степанищева:
Предложение добавить следующие опции:
1) обрабатывать/не_трогать файлы в поддиректориях
2) перезаписывать_оригиналы / не_перезаписывать. В случае перезаписи dir-out использовать для бэкапа.
3) не переименовывать файлы
4) не менять качество, если указан радиус 0
5) сделать возможность не менять размеры картинок (м.б. при не указанной ширине)
6) сохранять EXIF
Спасибо!
Комментарий для abravorus:
В этой версии так и работает.
Комментарий для indeec17:
Огого :) Попробую всё сделать потихоньку. Хотя как не менять качество я пока не в курсе. jpegtran, по идее, должен это уметь, но на деле курочит картинки.
Комментарий для Евгения Степанищева:
Написал оболочку: можно взять здесь ( http://rghost.ru/2558487/private/ed63808fe5650bec6cf21eb053bc3df7 ). Называется MCShell. Что умеет: передавать параметры qulity, width, radius, background (цветов мало, потом сделаю красиво, если востребована будет конечно), переходит в папку out. Разумеется только для Windows, должна работать на всех версиях, по крайней мере 32-х битных.
В планах: добавить все параметры (пока нет маски, и пока в оболочке нельзя задавать папку через параметр out-dir). Будет востребована — буду развивать. Разумеется оболочка она на то и оболочка, чтобы как то временно скрасить отсутствие GUI.
Также присоединяюсь к товарищам высказавшимся о том, что было бы неплохо убрать из EXIF последнее редактировавшее картинку приложение.
Комментарий для oldTV:
Огого :) Комьюнити :)
Я для начала попробую просто скопировать EXIF, а там уж доберусь и до парсинга.
@FIX
ну и октоторп в указании цвета не нужен :)
Комментарий для Евгения Степанищева:
Новая версия оболочки: http://rghost.ru/2564426/private/535667cf263b87e12a5e85a0d2b98dd5
Теперь все функции, все цвета, типа улучшенный интерфейс.
В планах (пока делать не буду): настройки из ini, профили из него же, просмотр выходного каталога в оболочке
Теперь оболочка будет здесь: http://rghost.ru/users/oldtv/releases/MCShell
А так все как и было
Комментарий для oldTV:
Крутая штука! На чём написано?