Как gravatar автоматически регулирует цвет ваших изображений?

Я решил, что хочу изменить свой граватар на круглый. У меня есть это в моем блоге с css, и я предпочитаю эффект, поэтому решил использовать немного imagemagick, чтобы дать моему изображению круговой альфа-канал (чтобы я мог использовать его и на SO и т. Д.). парой быстрых команд позже я был отсортирован:

# crop to square 422x422 with 0x0 offset
convert mike_gravatar.jpeg -crop 422x422+0+0 mike_gravatar_square.jpeg
# give circular alpha channel around it NOTE this is for a 422x422 image (note the 211x211)
convert mike_gravatar_square.jpeg \( +clone -threshold -1 -negate -fill white -draw "circle 211,211,211,0" \) -alpha off -compose copy_opacity -composite mike_gravatar_circle.png

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


как вы, наверное, догадались из вопроса, не все так хорошо:

затемненное изображение граватара

хорошо, я, должно быть, явно испортил свой imagemagick и не проверил, что изображения до и после одинаковы, снова откройте изображения рядом друг с другом и убедитесь, что они действительно одинаковы. Я пытаюсь загрузить снова в gravatar и замечаю, что они, похоже, обрабатывают изображения после этапа «обрезки», вот как это выглядит в браузере после загрузки файла (до того, как обрезка испортит его):

рабочее изображение граватара

Хорошо, давайте немного покопаемся, кто-то, должно быть, наткнулся на это раньше, поэтому я осмотрелся и вопит одинокая душа в пустынной пустоши форума. Сейчас на это нет ответа, но соответствующий текст здесь:

Кажется, что если фотография или изображение, загруженное в кадратор Gravatar, не имеет угольно-черного цвета, он автоматически выравнивает ближайший серый к черному и затемняет все изображение, включая затемнение белого до серого. Можно подтвердить, что это происходит с любым PNG-изображением с серым фоном или с достаточно большой его долей, независимо от того, содержит ли оно 255 белых цветов и независимо от того, имеет ли оно альфа-смешивание или нет.

Кажется, я могу исправить это, вставив один черный пиксель, это звучит нормально, поэтому я пытаюсь добавить черный пиксель, затем один черный и один белый пиксель, результат:

чертов граватар

Так что в основном теперь у меня нет идей:

  • Кто-нибудь знает, что делает постобработка gravatar, поэтому я могу отменить его или противодействовать его эффектам с помощью предварительной обработки?
  • документирована ли эта «функция» где-либо, или ее можно отключить или обойти?

Я думаю, было бы неплохо предварительно обработать изображение, чтобы противодействовать затемнению, которое они сделают с ним, но это потребует точного знания того, что они делают, чтобы изменить вещи, и, очевидно, это может быть невозможно (зависит от относительного движения каждого цвета, Я полагаю)

РЕДАКТИРОВАТЬ:

Я попытался сделать инверсное изображение, чтобы увидеть, основывается ли оно на обработке средних или экстремальных значений, и оно также было затемнено, кажется, что это скорее среднее значение:

темный перевернутый круг


person Mike H-R    schedule 09.06.2014    source источник


Ответы (1)


Хорошо, у меня есть решение, которое «сработало для меня», к сожалению, оно просто эмпирическое и «достаточно хорошее» (я бы очень хотел проверить, что происходит на самом деле, но, к сожалению, у меня больше нет времени, чтобы посвятить себя следует решить, если у кого-то достаточно времени.

Прежде всего, что я сделал, я просто попытался отбелить изображение случайным образом, что в итоге сработало, так это гамма около 2

convert mike_gravatar_circle.png -gamma 2 mike_gravatar_circle_light_2.png

вот как выглядит картинка до и после обработки граватаром:

гравировать изображение перед обработкойгравировать фото после обработки

Я чувствую, что это довольно нелепо, что мне нужно затереть мою картинку, как я делаю слева, чтобы она выглядела нормально, поэтому я оставлю этот вопрос открытым, чтобы посмотреть, может ли кто-нибудь показать мне лучший / более чистый способ сделать это.

РЕДАКТИРОВАТЬ: забыл упомянуть мои (совершенно необоснованные) предположения о том, как это должно быть решено. Итак, я предполагаю, что gravatar может попытаться сделать средний цвет изображения некоторым типом значения среднего диапазона (поскольку это может показаться разумным... я думаю, я не знаю) и улавливает альфу как полностью белый. попытка провести некоторые эксперименты для определения может быть интересной, но только если у них есть API для автоматизации загрузки и загрузки изображений, иначе это будет болезненным усилием, я с нетерпением жду любых предложений относительно того, что люди думают о том, что происходит.

person Mike H-R    schedule 10.06.2014
comment
Это похоже на проблемы с ImageMagick. Недавно он начал предполагать, что изображения в градациях серого находятся в линейном цветовом пространстве, а не в цветовом пространстве sRGB (то есть гамма отключена в 2,2 раза). Какую версию ImageMagick (convert) вы использовали? Просто введите convert и посмотрите на первую строку вывода, чтобы узнать. - person Glenn Randers-Pehrson; 11.06.2014
comment
@GlennRanders-Pehrson У меня есть 6.8.9-1 Q16 x86_64, но проблема в том, что я загружаю изображение слева, чтобы заставить граватар отображать изображение справа. Боюсь, я не совсем понимаю, что вы говорите об imagemagick, не могли бы вы пояснить? Вы говорите, что при обработке изображения для кадрирования gravatar считает, что изображение использует линейную цветовую шкалу, поэтому вместо простого кадрирования оно также применяет к нему гамма-преобразование 2,2? разве это не осветлило бы изображение, а не затемнило бы его, как это происходит? Я уверен, что ошибаюсь, но, похоже, вы на правильном пути... - person Mike H-R; 11.06.2014
comment
Чтобы предотвратить изменение цветового пространства convert, добавьте параметр, сообщающий ImageMagick, что ваше изображение уже находится в цветовом пространстве sRGB или RGB (линейном), в зависимости от того, что может быть, например, convert -set colorspace mike_gravatar.jpeg -crop 422x422+0+ 0 mike_gravatar_square.jpeg, а также добавьте -set colorspace sRGB в начало вашей второй команды convert. Было бы полезно иметь копию фактического изображения mike_gravatar.jpeg, с которого вы начали. - person Glenn Randers-Pehrson; 12.06.2014
comment
Хммм, к сожалению, добавление -set colorspace sRGB в начале каждой команды сразу после конвертации не помогло, я неправильно понял, что должен делать? - person Mike H-R; 12.06.2014
comment
Кроме того, если вам нужна картинка, которую граватар сделает темнее, вы можете использовать ее здесь так как это также затемняется граватаром (что означает, что их операция даже не идемпотентна!) - person Mike H-R; 12.06.2014
comment
Вы пробовали как -set цветовое пространство sRGB, так и -set цветовое пространство RGB? Я бы попробовал оба, если бы имел доступ к вашему оригинальному JPEG. Кстати, ваш IM-6.8.9-1 довольно свежий, так что все должно быть в порядке. Сейчас мы на 6.8.9-3, но я не думаю, что что-то изменилось в этой области. Я бы также проверил с GraphicsMagick. - person Glenn Randers-Pehrson; 12.06.2014