Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Пакетное скругление картинок 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, буду думать.

Скачать новую версию можно там же, где и предыдущую.

26 комментариев
SiMM 2010

-​-​mask=*.{j,J}{p,P}{g,G}

Бывает у них и расширение jpeg.

SiMM 2010

EXIF ... не сохраняется библиотекой GD

Как вариант
http://pel.sourceforge.net/
http://www.phpclasses.org/package/1042-PHP-EXIF-information-reader-and-writer.html

oldTV 2010

Евгений, спасибо. Новая версия неплоха, ждем конечно GUI.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для SiMM:

Бывает у них и расширение jpeg

В чём сложность? -​-​mask=*.{j,J}{p,P}{e,E,}{g,G}

Евгений Степанищев (bolknote.ru) 2010

Комментарий для SiMM:

Как вариант PEL phpclasses

Я смотрел. Они монструозны — сотни килобайт, я перед сном придумал как это сделать в несколько строк.

SiMM 2010

Комментарий для Евгения Степанищева:

В чём сложность?

Подумал, что описан набор возможных значений :) А что ж скобки не квадратные, да и запятая ни к чему — больше было бы похоже на PCRE :)

SiMM 2010

Комментарий для Евгения Степанищева:

я перед сном придумал как это сделать в несколько строк

Было бы любопытно взглянуть — полагаю, достаточно знания спецификации — тупо скопировать в выходной файл EXIF входного.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для SiMM:

А что ж скобки не квадратные, да и запятая ни к чему — больше было бы похоже на PCRE :)

Потому что это не PCRE, а file patterns, принятые в Linux/UNIX.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для SiMM:

Было бы любопытно взглянуть — полагаю, достаточно знания спецификации — тупо скопировать в выходной файл EXIF входного.

После обработки jpegtran получаются два файла (jpegtran так работает), сейчас я первый (входной) удаляю, а второй (выходной) переношу на место первого.

А можно делать так — копировать чанками (в JPEG есть просто выделяемые секции), сразу после заголовка подселить APP0 и APP1 (ещё толком не читал, но кажется именно там сидит EXIF, эти секции нам даст функция getimagesize в PHP), собственный APPx пропустить, а потом просто докопировать остаток.

indeec17 2010

Комментарий для Евгения Степанищева:

я как-то тестировал 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]» с оригиналами.

indeec17 2010

Комментарий для Евгения Степанищева:

в догонку.
Ключ size_priority=+
действует так.
Во временной папке создаются 3 файла утилитой jpegtran — с ключами
$param=array(
’’,
’ -optimize’,
’ -progressive’,
);
и выбирается наименьший по размеру.
Утилита отчитывается — в большинстве случаев побеждает -progressive, иногда достаточно -optimize.
Ещё в информационном пространстве Земли существует потребность из EXIF стирать только программу редактирования =) но при этом чтобы не трогались всякие гео-координаты.

indeec17 2010

Комментарий для indeec17:

накосячил в комментарии 10: В абзаце с буквы «Г», в скобках после «сохраняю оригиналы в случае надобности» должен быть «+»

Евгений Степанищев (bolknote.ru) 2010

Комментарий для indeec17:

Два раза перечитал как-то не уверен, что понял какие предложения по улучшению содержатся в данных комментариях :)

oldTV 2010

Комментарий для Евгения Степанищева:

Да, кстати, а ширина картинки есть в ключах?

oldTV 2010

Комментарий для Евгения Степанищева:

Не получается запустить с ключами:
makecorner -​-​quality=99 400 -​-​radius=40 -​-​background=#ffcccc

вылетает с ошибкой: «память не может быть read». В папке out появляются файлы jpegtran.cmd и exe.

oldTV 2010

Дико извиняюсь — версию нормально не скачал. Все увидел, сорри

abravorus 2010

Спасибо. Просьба по возможности добавить возможность понимать расширение JPG (capital letters).

indeec17 2010

Комментарий для Евгения Степанищева:

Предложение добавить следующие опции:
1) обрабатывать/не_трогать файлы в поддиректориях
2) перезаписывать_оригиналы / не_перезаписывать. В случае перезаписи dir-out использовать для бэкапа.
3) не переименовывать файлы
4) не менять качество, если указан радиус 0
5) сделать возможность не менять размеры картинок (м.б. при не указанной ширине)
6) сохранять EXIF
Спасибо!

Евгений Степанищев (bolknote.ru) 2010

Комментарий для abravorus:

Спасибо. Просьба по возможности добавить возможность понимать расширение JPG (capital letters).

В этой версии так и работает.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для indeec17:

Огого :) Попробую всё сделать потихоньку. Хотя как не менять качество я пока не в курсе. jpegtran, по идее, должен это уметь, но на деле курочит картинки.

oldTV 2010

Комментарий для Евгения Степанищева:

Написал оболочку: можно взять здесь ( http://rghost.ru/2558487/private/ed63808fe5650bec6cf21eb053bc3df7 ). Называется MCShell. Что умеет: передавать параметры qulity, width, radius, background (цветов мало, потом сделаю красиво, если востребована будет конечно), переходит в папку out. Разумеется только для Windows, должна работать на всех версиях, по крайней мере 32-х битных.

В планах: добавить все параметры (пока нет маски, и пока в оболочке нельзя задавать папку через параметр out-dir). Будет востребована — буду развивать. Разумеется оболочка она на то и оболочка, чтобы как то временно скрасить отсутствие GUI.

Также присоединяюсь к товарищам высказавшимся о том, что было бы неплохо убрать из EXIF последнее редактировавшее картинку приложение.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для oldTV:

Огого :) Комьюнити :)

Я для начала попробую просто скопировать EXIF, а там уж доберусь и до парсинга.

hshhhhh.name 2010

не то вырезается, он просто не сохраняется

@FIX

ну и октоторп в указании цвета не нужен :)

oldTV 2010

Комментарий для Евгения Степанищева:

Новая версия оболочки: http://rghost.ru/2564426/private/535667cf263b87e12a5e85a0d2b98dd5
Теперь все функции, все цвета, типа улучшенный интерфейс.
В планах (пока делать не буду): настройки из ini, профили из него же, просмотр выходного каталога в оболочке

oldTV 2010

Теперь оболочка будет здесь: http://rghost.ru/users/oldtv/releases/MCShell
А так все как и было

Евгений Степанищев (bolknote.ru) 2010

Комментарий для oldTV:

Крутая штука! На чём написано?