Четыре способа нарезки картинок в OS X

в 11:29, , рубрики: automator, Cocoa, mac os x, автоматизация, лень, обработка изображений, метки: , , ,

Всем привет.
Сразу уточню заголовок: под нарезкой подразумевалось создание уменьшенных копий png и jpg файлов. То есть, то, что иногда требуется разработчикам/верстальщикам/дизайнерам. В моем конкретном случае — уменьшение картинкок для Retina дисплеев в два раза под обычные экраны.

Способ #0, канонический

То есть фотошопом или каким-нибудь другим редактором изображений при непосредственном участии пользователя. Последовательность действий такова: открываешь картинку в редакторе, уменьшаешь до 50 % (вставить нужное число), сохраняешь с требуемым именем. Если уменьшение изображения повесить макросом на хоткей, то время тратится только на переименование файла и первоначальную загрузку редактора. В итоге — секунд 30 на файл, недолго, но если файлов много, то потеря времени ощутима.
Могу поспорить, что многие, очень многие, так и делают или делали в течение какого-то периода своей карьеры. Я сам, зная о том, что все это можно легко автоматизировать, все равно рубил дрова тупым топором, успокаиваясь мыслью, что просто нет времени его наточить. И наконец это время пришло.

Маловажная информация
Катализатором, кстати, выступила эта ветка комментариев.

Способ #1: «Все уже сделали за нас»

Существуют вполне себе многофункциональные платные программы, а также инструмент в Photoshop начиная с v. 14.1 (спасибо designiac за ссылку). Они проворачивают свою магию прямо с psd файлом, избавляя от некоторых рутинных операций. Все это, конечно, круто, но во-первых, за деньги (все же пользуются лицензионным софтом!), а во-вторых, они все равно не сделают все за вас. Конечно, хотелось бы услышать мнение тех, кто пользовался подобными инструментами, может я не прав, и они действительно творят волшебство.

Способ #2: «Автоматизация для домохозяек»

Итак, у нас имеется набор изображений в форматах png и jpg в самом большом разрешении из требуемых, которые уже мы или кто-то другой нарезал. Нужно создать копии этих изображений, пропорционально уменьшенные в определенное количество раз, а также переименовать их, как нам надо. И конечно же на арену выходит Automator! Штука с большими возможностями и простая в использовании. Нужный нам функционал делается за несколько кликов мышкой, причем с помощью этого руководства, например, со всем справится даже моя мама. И дело даже не в том, что моя мама — достаточно продвинутый пользователь, а том, что это действительно очень просто.
Поэтому описывать процесс создания здесь не буду, если кому-то вдруг интересен результат — пожалуйста (размер столь маленькой программы такой большой в первую очередь из-за иконки с роботом Отто объемом в 1.3 Mb). Приложение попросит выбрать исходные файлы, потом — папку, куда поместить уменьшенные копии, и уменьшит выбранные файлы на 50 %, убрав в их названиях постфикс для ретины '@2x'. Если под горячую руку попадутся файлы других типов, то они тоже будут скопированы и по возможности переименованы. Минус данного подхода в том, что для каждого конкретного сценария (другой процент уменьшения, другой способ именования) придётся делать отдельное приложение. Вполне возможно, что если покорпеть над мануалами, все можно реализовать и рамках одного приложения, но зачем делать сложные вещи инструментом, предназначенным для простых?
С помощью Automator можно сделать как полноценное приложение, так и т. н. сервис — последовательность неких действий, интегрируемую в операционную систему, которую можно вызвать прямо из конекстного меню файла. Отлично подойдет как дополнение, если надо применить действие не к целому списку файлов, а точечно. К тому же вызов сервиса можно повесить на хоткей, правда почему-то это не работает. Конечный результат, если лень делать самому, — по ссылке. Нужно распаковать архив и скопировать находящийся внутри него файл с расширением workflow в папку Library/Services вашего пользователя.
Обработку изображений программы из Automator делают скорее всего с помощью встроенного в OS X инструмента sips, конечный результат, если сравнивать попиксельно, иногда отличается от результата аналогичного уменьшения картинки в Photoshop, но отличия минимальны, и изображения в любом случае выглядят хорошо.

Способ #3, для истинных ценителей

Конечно же, каждый сознательный гражданин, который знает толк в извращениях, в первую очередь подумает именно об этом. Написать самому! Преимуществ тут куча: удобный графический интерфейс, тонкая настройка всего, что тебе нужно, уверенность, что приложение не подведет тебя… но все это при условии, что ты вложишь какое-то количество труда. Я переборол себя и решил вложить. Получилось, на мой взгляд, неплохо. Как-то так:
Четыре способа нарезки картинок в OS X

Помимо выбора исходной папки и конечной папки можно задать процент уменьшения и строку с определенным синтаксисом (маску), по которой будет происходить переименование. Например, маска -@2x означает, что из имени будет убран текст @2x, а *+_copy означает, что к концу имени файла (перед расширением) будет добавлено _copy.

Все тонкости синтаксиса я постарался кое-как описать
Переименование уменьшенных копий исходных изображений происходит по указанной маске имени с помощью управляющих символов и символов-значений
Управляющих символов всего четыре: — (минус), + (плюс), * (звёздочка) и / (слеш). Символы-значения — все остальные символы на ваш вкус.
Любые символы-значения, находящиеся перед первым управляющим символом, игнорируются.
Появление минуса означает то, что последовательность последующих символов-значенй до следующего управляющего символа '+' или '-' или конца строки будет удаляться из конечного имени файла, если они там есть конечно же. Пример: -@2x сделает то, что скорее всего и нужно — удалит все вхождения '@2x' в имени файла.
Появление плюса означает, что последовательность последующих символов-значенй до следующего управляющего символа '+' или '-' или конца строки будет добавляться в конец или начало конечного имени файла.
Звездочка означает, что все последовательности с плюсом, находящиеся до неё, добавляются к началу имени, а после нее — к концу. Управляющим символом является только первая звездочка, все пследующие воспринимаются как символы-значения. Если управляющая звездочка находится среди символов-значений, то она считается стоящей перед следующим символом '+' или '-'. На последовательности с минусом звездочка не влияет никак. Примеры:
-@2x+foo*+_copy удалит все вхождения '@2x', добавит 'foo' перед именем файла и '_copy' после. Аналогично отработают следющие маски: йцукен-@2x+foo*+_copy, -@2x+f*oo+_copy и +foo*+_copy-@2x
Вначале выполняются все минус-маски, потом — все плюс-маски.
Слеш экранирует следующий за ним управляющий символ, чтобы он считался символом-значением.

Обработку изображений внутри приложения я реализовал с помощью все того же sips, так что результат на выходе аналогичный программам, сгенерированным с помощью Automator.
При желании можно это безобразие применить и просто для группового переименования, выбрав одну и ту же папку как приемник и как источник, а процент уменьшения выставив на 100.
Ссылка на скомпилированное приложение вот (тестировалось на OS X 10.8.5), по некоторым неочевидным причинам на гитхаб исходники не заливаю, если кому будет интересно — пишите, скину их вам архивом.

Спасибо за внимание, да пребудет с нами автоматизация!

P.S. Прошу обратить внимание, что пост не подразумевает, что указанные четыре способа единственные.

Автор: tralf

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js