Как стать автором
Обновить

Комментарии 33

Картинка подобрана правильно настолько, что словосочетание Resize To Fill обретает новый смысл.
А о самом приложении сказать особо нечего. Мне лично пока вполне хватает filebrower versions; Кроме того вспоминается заслуживший когда-то статус легендарного sorl.thumbnail
sorl.thumbnail, все равно, вне конкуренции.
Он еще и очень, очень медлительный.
Если использовать кеширование, он ни разу медлительным не будет :-)

(старый комментарий стёр, т.к. ошибся веткой, извините)
Прям чрезвычайно?
Прям да. Посмотрите его api и статью, на которую я дал ссылку.
По ссылке много букв сплошные хочуны на тему «было бы здорово», которые в принципе не решить без человеческого вмешательства. Ну, разве что реализовывать детекторы лиц.

А с простыми задачами — кропнуть, вписать целиком, вписать по ширине, вписать по высоте, отбить поля — с этим любые решения справляются, солр в том числе.
> По ссылке много букв
Хороший аргумент, возьму на вооружение.

> По сплошные хочуны на тему «было бы здорово»
Вообще-то это наиболее общий набор того, с чем приходится сталкиваться при разработке сайтов. Иногда бывают более специфические требования. И все они (и общие и специфические) реализуются с помощью imagekit.

> с этим любые решения справляются, солр в том числе
Приведите мне пожалуйста пример, как заполнить изображением квадрат 100×100. Заполнить значит, что после ресайза одна из сторон должна быть 100 пикселей, а вторая 100 или больше, в соответствии с пропорциями исходного изображения.
Не очень представляю, как это — квадрат, у которого одна сторона ровно 100 пикселей, а другая — 100 или больше.
Я нигде не писал, что у квадрата вторая сторона 100 или больше. Квадрат 100×100. Изображение должно его накрывать. У изображения (не квадрата) одна из сторон 100 или больше.
> А с простыми задачами
Вообще, мне интересно. Вот вы судя по всему используете sorl.thumbnail. И что вы делаете, когда у вас не «простой случай»? Идете и к дизайнеру и говорите «ты знаешь, я тут использую sorl.thumbnail, так что извини приятель, сделать как ты хотел не получится»?
Пример приведите, что ли. Мне, каюсь, вообще сложно представить, что тумбам нужно кроме ресайза и кропа (и неважно, с сохранением пропорций или без).
Выше же привел, вы его представить не можете.
Не могу уяснить постановку задачи, виноват. Что-то типа такого?

{% thumbnail "x100" crop="100,100" as im%}
    <img src="{{ im.url }}">
{% endthumbnail %}
> Что-то типа такого?
Я же заранее сказал, что это не решается sorl.thumbnail.

Такой код сделает из картинки из топика вот такую:

Размер 53×100, квадрат не заполнен.
Почему же не решается?

sorl-thumbnail.readthedocs.org/en/latest/template.html#is-portrait

Более того, ничто не мешает написать свой тэг:

sorl-thumbnail.readthedocs.org/en/latest/examples.html?highlight=get_thumbnail#low-level-api-examples

А заводить дополнительные поля для каждого вида превью – это, извините, рак.
> Почему же не решается?
Т.е. каждый раз, когда эта картинка нужна, придется написать минимум:

{% if item.image|is_portrait %}
    {% thumbnail item.image "100x" %}
        <img src="{{ im.url }}">
    {% endthumbnail %}
{% else %}
    {% thumbnail item.image "x100" %}
        <img src="{{ im.url }}">
    {% endthumbnail %}
{% endif %}

Уже каша. А у картинки еще другие атрибуты могут быть, а она еще в ссылку может оборачиваться.

Но формально, задача все же решена благодаря существованию для этого частного случая фильтра is_portrait. Давайте немного усложним: точно так же накрыть прямоугольник 120×100 пикселей.

> Более того, ничто не мешает написать свой тэг:
Где там про написание своего тега?
Вы дальше собственного носа не видите, или нарочно игнорируете документацию:

{% thumbnail item.image "100x" %}
    <p>Оберните картинку хоть в «Войну и мир» Толстого</p>
    <a href="http://lmgtfy.com/?q=http%3A%2F%2Fsorl-thumbnail.readthedocs.org%2Fen%2Flatest%2F">
        <img src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}">
    </a>
{% endthumbnail %}
Я не понимаю, пример чего вы привели. Это никак не относится не к изображению 120×100 не к 100×100. Вот о чем я говорю: у нас получается 2 ветки и код сильно усложняется:

{% if item.current %}
	{% if item.image|is_portrait %}
		{% thumbnail item.image "100x" as im %}
			<img src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}">
		{% endthumbnail %}
	{% else %}
		{% thumbnail item.image "x100" as im %}
			<img src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}">
		{% endthumbnail %}
	{% endif %}
	{{ item.name }}
{% else %}
	<a href="{{ item.url }}">
		{% if item.image|is_portrait %}
			{% thumbnail item.image "100x" as im %}
				<img src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}">
			{% endthumbnail %}
		{% else %}
			{% thumbnail item.image "x100" as im %}
				<img src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}">
			{% endthumbnail %}
		{% endif %}
		{{ item.name }}
	</a>
{% endif %}


Сравните с:

{% if item.current %}
	<img src="{{ item.image_small.url }}" width="{{ item.image_small.x }}" height="{{ item.image_small.y }}">
	{{ item.name }}
{% else %}
	<a href="{{ item.url }}">
		<img src="{{ item.image_small.url }}" width="{{ item.image_small.x }}" height="{{ item.image_small.y }}">
		{{ item.name }}
	</a>
{% endif %}
Опять вы не читаете. Пример выше относится к:
Уже каша. А у картинки еще другие атрибуты могут быть, а она еще в ссылку может оборачиваться.


И на каждую превьюшку вы будете добавлять поле в модель? А если у вас их 20 будет? Заказчик может закапризничать и захочет размеры поменять?

А для того, чтобы не усложнять код шаблона как раз и нужен get_thumbnail. Напишите свой тэг/метод/функцию, который/ая будет считать вам необходимые пропорции.
> Опять вы не читаете.
Да нет же, это вы. Мы обсуждаем конкретный пример, покрыть превьюшкой площадь 100×100. Там, где вы войну и мир написали, этого нет.

> А если у вас их 20 будет
Примерно столько и есть. Каждая в модели.

> Заказчик может закапризничать и захочет размеры поменять?
Это не каприз, а стандартная практика. Меняются размеры, добавляются фильтры, вотермарки. Потом очищается кеш.

> Напишите свой тэг/метод/функцию, который/ая будет считать
> вам необходимые пропорции.
Примеров, как правильно это делать что-то в документации не видно. А если с самого начла разбираться, как что работает, зачем тогда вообще использовать sorl-thumbnail?

У imagekit любая манипуляция делается проще простого. Создается фильтр — функция, принимающая картинку и отдающая другую картинку. Этот фильтр указывается в моделе. Все.
sorl.thumbnail — как вариант, когда нет доступа к конфигурации nginx или он стоит как сервер, HttpImageFilterModule nginx'a когда есть такая возможность) Последний позволит настроить кеширование, ресайз разный, даже поворот.
wiki.nginx.org/HttpImageFilterModule — вот тут про nginx, как выяснилось, не все знают про этот модуль.
Есть даже приложение специальное для Django использующее этот модуль nginx: django-nginx-image
Вот уж не ожидал её тут увидеть
А кто это?
Весь Image Processing демонстрируется на Lena.bmp, а тут давняя знакомая IRL.
Как-то не очень я понимаю подход с дополнительным полем для каждого тумбнейла в модели.
В базе эти поля не создаются, по этому лишнего мусора не приносят.
Опять заклюют, но Django это был мой мой любимый фильм в детстве, а от мелодии и сейчас «волосы шевелятся».
Ну, а блондинок я не очень… даже с такими достоинствами…
Я пользую иногда старый django-imagekit из ветки support/0.4.x после уже пошел такой бред как вверху описано в посте что под каждый размер надо добавлять поле в модель.
В старых версиях было удобно что создаешь spec файл с нужными размерами и процессорами и указываешь его в модели.
Вообще чаще всего достаточно простенького djangothumbnails.com
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории