alex_taran (alex_taran) wrote,
alex_taran
alex_taran

  • Mood:
  • Music:

Об ImageMagick и философии UNIX

В википедии в статье Философия UNIX написано:
Пишите программы, которые делают что-то одно и делают это хорошо.

Предположим, что мы хотим сделать кое-что одно - а именно, кропнуть картинку и сделать это хорошо.

Вот у нас есть картинка, самая обычная png-шка, скажем, вот такая:

part

И, предположим, хотим ее разбить на 8 квадратных тайлов, просто 8 раз кропнув.

Начнем:
convert texturepack.png -crop 32x32+0+0 grass.png
И получим:
grass

Смотрите - мы попытались сделать что-то одно и программа сделала нам это хорошо. Классно, не правда ли? Давайте продолжим.
convert texturepack.png -crop 32x32+32+0 stone.png
И увидим:
lol
Подождите. Не кажется ли вам, что произошла какая-то ёбаная хуйня? Картинка стала гораздо темнее, чем была. Давайте поэкспериментируем, добавим +1 ряд пикселей справа и снизу:
convert texturepack.png -crop 33x33+32+0 stone.png
Вы только посмотрите:
thr
Немного поэкспериментировав самомтоятельно, вы могли бы задать справедливый вопрос: "Что за феерический пиздец?"

Не буду томить, расскажу в чем дело. Оказывается, картинка на выходе может быть сохранена в виде grayscale, поскольку для каждого пикселя R=G=B, что imagemagick с успехом и делает, проёбывая gamma в процессе конверсии.

Как нам всё починить - подсказывают на Stackoverflow. Надо вернуть gamma на место, явно указав его параметром командной строки при запуске convert. Вот так:
convert texturepack.png -crop 32x32+32+0 -gamma значение_гаммы stone.png
В том же треде задают важный вопрос - откуда узнать значение gamma для исходной картинки? И ответ - "оно равно 2.2 для всех стандартных изображений, только если картинка не была сгенерирована на старом Mac'e".

Теперь мы можем решить задачу:
convert texturepack.png -crop 32x32+32+0 -gamma 2.2 stone.png
Смотрите, получилось:
stone
Вспомните это значение, если вдруг захотите кропнуть картинку из командной строки.

Кажется, чтобы пользоваться молотком, не нужно знать особенностей структуры железа (для стандартных usecase-ов).

Тем не менее, помните про грабли с gamma 2.2. Судя по тредам на форумах, это документированное поведение.

Теперь вы тоже можете хорошо кропнуть картинку.
Tags: fuckup
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments