Модуль для малювання растрових картинок html таблицями

Я люблю, коли все працює. Коли не працює - не люблю. Вісім років тому я почав писати дисертацію по деформативності моделювання і одночасно шукати собі такий інструмент, щоб працював. Я всього лише шукав щось таке, що могло б перетворювати ідеї в картинки. Виявилося, це зовсім не тривіально.

Модуль для малювання растрових картинок html таблицями

Після деяких невдалих спроб знайти ідеал, зупинитися довелося на Python + TkInter. Головна перевага цієї зв'язки - як мінімум на Windows вона ставиться з коробки і не вередує. Це важливо, коли займатися доводиться при кожній зручній нагоді: в інституті, на роботі, вдома, у батьків. В іншому вона, звичайно, не дуже зручна, хоча в цілому для того, щоб подивитися результат обчислювального експерименту очима, годиться.

Але ось іноді, на жаль досить нечасто, обчислювальний експеримент дає такі результати, таку картинку, яку хочеться поділитися. Іноді таких картинок не одна і не тільки картинки представляють інтерес. Ще й якісь вимірювання, стартові коефіцієнти, числові результати, в загальному, - текст і таблиці разом. Доводиться знімати картинку скріншотом, вставляти в який-небудь док, туди ж копіювати текст з консолі і так далі. Не так уже й проблематично, але хотілося б, щоб кінцевий файл «для поділитися» формувався автомтіческі.

На жаль, просте і робоче рішення прийшло в голову вже сильно пізніше захисту. Растрова картинка - це фактично матриця кольорів. Матриці в чистому Пітоні - це вкладені масиви. А ось, наприклад, в HTML - таблиці. Можна згенерувати таблицю з осередками розмірами в один піксель і кожному осередку привласнити відповідний колір фону. Потім це все можна вставити в будь-який HTML разом з текстом і нормальними таблицями.

Звичайно, якщо колір привласнювати буквально кожному осередку, таблиця виявиться незаслужено левіафанской. Тому тут використовується нескладний оптимізує алгоритм. Колір присвоюється не осередкам, а прямокутникам з об'єднаних осередків. І ось так вже виходить не так погано.

Наприклад, картика з тіста самого модуля, та що зверху статті, займає близько 260 KB. Стисла ЗІПом з нормальним рівнем компресії - 19 KB.

Для порівняння, та ж картинка в стислому BMP займає понад 500 KB, в 256-кольоровому GIF - 65 KB, в PNG - ті ж 19 KB.

І не те що б це серйозно когось хвилювало в двадцять першому столітті.

Так, це тупе рішення з масою недоліків, але воно дозволяє сконцентруватися на дослідженні, а не на установці matplotlib на кожній машині і не на конвертації, наприклад. odt в .docx. Найголовніше гідність такого підходу - текст і картинка виходить в одному такому файлі, який можна переслати кому завгодно, і одержувач зможе його відкрити без жодних проблем несумісності. Навіть криво зібраний HTML будь-який сучасний браузер підхопить і якось так виведе. Воно просто працює.