<commit_before>Watermarker
==========
Watermarker - это тулза для легкого, почти ванильного создания водяных знаков на картинках вашего проекта. Редактирование 
положения водяных знаков происходит в админке. Под водяным знаком понимается картинка, поддержки текста пока нет.
Работает с Jinja2 (требуется django-jinja).

## Проверялось с

* Python 2.7
* Django 1.6, 1.7, 1.8

## Подключение к проекту
Установка через pip:

    pip install git+https://github.com/Skycker/watermarker@master
  
## Настройка  
Добавляем приложение в `INSTALLED_APPS`:  

    INSTALLED_APPS = (
        ...
        'watermarker',
        ...
    )

*Для Django < 1.7*

    ./manage.py syncdb
    
*Для Django >= 1.7*

В проекте приложены миграции

    ./manage.py migrate

## WorkFlow  
В панели администратора появляется модель `Watermrks`. Заходим создаем новый объект, заполняем. Особенно удобно при 
необходимости ставить разные возяные знаки на страницах (в данном случае просто создаем несколько записей 
в таблице `Watermrks`)

Маленькие особенности:  
    1. Заголовок (Title) набираем по-английски, он нам понадобится позже.  
    2. Если в графе Позиция (Position) выбираем местоположение ваодяного знака
    3. Для позиций по углам можно заполнить отступы по осям Х и У
    4. В штатном режиме либа не перерисовывает уже созданные ватермарки. Но если очень хочется или поменялись настройки отображения знака, то
        пункт Update hard вам поможет. Если он установлен в True, то при рендеринге страницы будут всегда перерисовываться ватермарки.
        Не забудьте снять флаг после применнеия изменений, ибо производительность.  
    5. Графа Is active работает как обычно. Это способ в один клин отключить ватермарку. При этом не нужно идти в код и что-то там менять

Водяные знаки накладываются в шаблонах. 

**Классический шаблонизатор Django**

Импортируем и применяем шаблонный фильтр:  

    {% load watermarks %}
    
    <img src="{{ image.img.url|watermark:'wm_title' }}" alt="{{ image.title }}">
    wm_title - имя для ватермарка, которое писали в графу Заголовок в админке.  

Способ работы с `easy_thumbnails`:  

    {% load thumbnail %}  
    {% load watermarks %}     
    
    {% thumbnail image.img|watermark:'wm_title' 160x160 as thumb %}
    <img src="{{ thumb.url|get_url_safe }}" alt="{{ image.title }}"/> 

Если передавать как аргумент фильтру строку с названием ватермарка, то каждый раз, для каждой фотки приходится делать  
запрос в БД, чтобы достать данные о водяном знаке. В целях производительности можно передать фильтру объект кдасса 
`Watermark`, который предварительно один раз вычислить во вьюхе. Лучше использовать именно этот режим

    Во views.py:
    from watermarker.models import Watermark
    
    def get_context_data(self, **kwargs):
        cd = super(Index, self).get_context_data()
        cd['wm'] = Watermark.objects.get(title='wm_title')
        return cd
    
    В шаблоне:
    <img src="{{ image.img.url|watermark:wm }}" alt="{{ image.title }}">

    {% thumbnail image.img|watermark:wm 160x160 as thumb %}
    <img src="{{ thumb.url|get_url_safe }}" alt="{{ image.title }}"/>

Рядом с файлами создается папка `watermarked` и изображения с водяными знаками склыдвываются туда. 
Так что исходные картинки не теряются. Если в какой-то момент водяные знаки надоели, то их можно отключить, 
убрав галочку Is active. При этом менять что-то в коде нет необходимости

**Поддержка Jinja2**

Необходима предварительная установка `djngo-jinja`
    
    <img src="{{ image.img.url|watermark('wm_title') }}" alt="{{ image.title }}">
    <img src="{{ thumbnail(image.img|watermark('wm_title'), size=(160, 160))|get_url_safe() }}" alt="{{ image.title }}"/>
    
    <img src="{{ image.img.url|watermark(wm) }}" alt="{{ image.title }}">
    <img src="{{ thumbnail(image.img|watermark(wm), size=(160, 160))|get_url_safe() }}" alt="{{ image.title }}"/>

## Требования
Для нормального функционирования требуется PIL и вся толпа пакетов для него.

Если совсем не работает, то возможно не хватает пакетов для PIL:

    apt-get install libjpeg-dev
    http://stackoverflow.com/questions/8915296/python-image-library-fails-with-message-decoder-jpeg-not-available-pil


<commit_msg>readme in english<commit_after>Watermarker
==========
Watermarker is a tool for easy creating watermarks in you Django project. Editing takes place in the admin panel. 
Watermarker put image (watermark) upon content images, text based watermarks support coming soon. 

It works with Jinja2 (django-jinja required)

## Tested with

* Python 2.7
* Django 1.6, 1.7, 1.8

## Install

Via pip:

    pip install git+https://github.com/Skycker/watermarker@master

## Setup 
 
Add app name in  `INSTALLED_APPS`:  

    INSTALLED_APPS = (
        ...
        'watermarker',
        ...
    )

*For Django < 1.7*

    ./manage.py syncdb
    
*For Django >= 1.7*

There are migrations in project

    ./manage.py migrate

## WorkFlow  

After installation model `Watermarks` will appear in admin panel. Go there, create a new instance, edit it. It's very 
useful if we need use different watermarks at site pages (this way just create several `Watermark`-instances)

Little features:  
    1. Field `Title` indicates our watermark ( `wm_title` for example, we will use it a bit later)   
    2. Upload watermark image (there is an example in repo to test)  
    3. In `Position` choose place for watermarks  
    4. For positions at corners you can tune X and Y indent  
    5. Content images get their watermarks when page loads for the first time. By default the library does not redraw   
       already created watermarks. If you need change it use `Update hard`. If it is `True` watermarker change   
       watermarks for images every time when page loads. Be accurate! It decrease performance very much  
    6. `Is active` is an easy way to switch watermark off. There is no necessity to change code  

Watermarks are set to images in templates. 

**Classic Django template engine**

Import and use template filter:  

    {% load watermarks %}
    
    <img src="{{ image.img.url|watermark:'wm_title' }}" alt="{{ image.title }}">
    wm_title - имя для ватермарка, которое писали в графу Заголовок в админке.  

The way to work with `easy_thumbnails`:  

    {% load thumbnail %}  
    {% load watermarks %}     
    
    {% thumbnail image.img|watermark:'wm_title' 160x160 as thumb %}
    <img src="{{ thumb.url|get_url_safe }}" alt="{{ image.title }}"/> 

If provide watermark name in filter every time for every image system will make query to `Watermark` table in database
to take data. To increase performance you can provide calculated in view instance of Watermark class. We recommend use 
this mode if it is possible.

    In views.py:
    from watermarker.models import Watermark
    
    def get_context_data(self, **kwargs):
        cd = super(Index, self).get_context_data()
        cd['wm'] = Watermark.objects.get(title='wm_title')
        return cd
    
    In template:
    <img src="{{ image.img.url|watermark:wm }}" alt="{{ image.title }}">

    {% thumbnail image.img|watermark:wm 160x160 as thumb %}
    <img src="{{ thumb.url|get_url_safe }}" alt="{{ image.title }}"/>

Images with watermarks are kept in folder `watermark` which is created in your media directory.

> original images are not deleted!


**Jinja2 support**

`djngo-jinja` is required
    
    <img src="{{ image.img.url|watermark('wm_title') }}" alt="{{ image.title }}">
    <img src="{{ thumbnail(image.img|watermark('wm_title'), size=(160, 160))|get_url_safe() }}" alt="{{ image.title }}"/>
    
    <img src="{{ image.img.url|watermark(wm) }}" alt="{{ image.title }}">
    <img src="{{ thumbnail(image.img|watermark(wm), size=(160, 160))|get_url_safe() }}" alt="{{ image.title }}"/>

## Localisation

By default:  
    * English  
    * Russian  

## Requirements

For stable fork `pillow` is required.

If smth wrong this list can possibly help:

    apt-get install libjpeg-dev
    http://stackoverflow.com/questions/8915296/python-image-library-fails-with-message-decoder-jpeg-not-available-pil



{'fraction_non_alphanumeric': 0.10556242274412855, 'fraction_numerical': 0.012484548825710755, 'mean_word_length': 3.5378575434660684, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 22, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '33859', 'n_tokens_mistral': 2878, 'n_tokens_neox': 3004, 'n_words': 878}