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

Скачать новую версию можно там же, где и предыдущую.
7 сентября 2010 00:39

SiMM (инкогнито)
7 сентября 2010, 04:23

--mask=*.{j,J}{p,P}{g,G}
Бывает у них и расширение jpeg.

SiMM (инкогнито)
7 сентября 2010, 04:30

EXIF ... не сохраняется библиотекой GD
Как вариант
http://pel.sourceforge.net/
http://www.phpclasses.org/package/1042-PHP-EXIF-information-reader-and-writer.html

oldTV (инкогнито)
7 сентября 2010, 10:05

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

bolk (bolknote.ru)
7 сентября 2010, 10:13, ответ предназначен SiMM

Бывает у них и расширение jpeg
В чём сложность? --mask=*.{j,J}{p,P}{e,E,}{g,G}

bolk (bolknote.ru)
7 сентября 2010, 10:14, ответ предназначен SiMM

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

SiMM (инкогнито)
7 сентября 2010, 10:20, ответ предназначен bolk (bolknote.ru):

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

SiMM (инкогнито)
7 сентября 2010, 10:22, ответ предназначен bolk (bolknote.ru):

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

bolk (bolknote.ru)
7 сентября 2010, 10:34, ответ предназначен SiMM

А что ж скобки не квадратные, да и запятая ни к чему - больше было бы похоже на PCRE :)
Потому что это не PCRE, а file patterns, принятые в Linux/UNIX.

bolk (bolknote.ru)
7 сентября 2010, 10:37, ответ предназначен SiMM

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

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

indeec17 (инкогнито)
7 сентября 2010, 11:47, ответ предназначен bolk (bolknote.ru):

я как-то тестировал 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 (инкогнито)
7 сентября 2010, 12:01, ответ предназначен bolk (bolknote.ru):

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

indeec17 (инкогнито)
7 сентября 2010, 12:16, ответ предназначен indeec17

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

bolk (bolknote.ru)
7 сентября 2010, 13:22, ответ предназначен indeec17

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

oldTV (инкогнито)
7 сентября 2010, 13:24, ответ предназначен bolk (bolknote.ru):

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

oldTV (инкогнито)
7 сентября 2010, 13:45, ответ предназначен bolk (bolknote.ru):

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

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

oldTV (инкогнито)
7 сентября 2010, 14:00

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

abravorus (инкогнито)
7 сентября 2010, 15:20

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

indeec17 (инкогнито)
7 сентября 2010, 16:11, ответ предназначен bolk (bolknote.ru):

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

bolk (bolknote.ru)
7 сентября 2010, 16:59, ответ предназначен abravorus

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

bolk (bolknote.ru)
7 сентября 2010, 17:00, ответ предназначен indeec17

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

oldTV (инкогнито)
7 сентября 2010, 19:18, ответ предназначен bolk (bolknote.ru):

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

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

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

bolk (bolknote.ru)
7 сентября 2010, 22:50, ответ предназначен oldTV

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

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

hshhhhh.name (hshhhhh.name)
7 сентября 2010, 23:23

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

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

oldTV (инкогнито)
8 сентября 2010, 13:22, ответ предназначен bolk (bolknote.ru):

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

oldTV (инкогнито)
8 сентября 2010, 19:41

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

bolk (bolknote.ru)
8 сентября 2010, 20:02, ответ предназначен oldTV

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)