Pillow-SIMD

Прискорення операцій у 2.5 рази порівняно з Pillow і в 10 порівняно з ImageMagick

Pillow-SIMD — це «форк-послідовник» бібліотеки роботи з зображеннями Pillow (яка сама є форком бібліотеки PIL, нині покійної). «Послідовник» означає, що проект не стає самостійною, а буде оновлюватися разом з Pillow і мати ту ж нумерацію версій, тільки з суфіксом. Я сподіваюся більш-менш оперативно випускати версії Pillow-SIMD відразу після виходу версій Pillow.
Чому SIMD
Є кілька способів поліпшення продуктивності обробки зображень (та і всіх інших речей, напевно, теж).
  1. Можна використовувати більш кращі алгоритми, які дають такий же результат.
  2. Можна зробити більш швидку реалізацію існуючого алгоритму.
  3. Можна підключити більше обчислювальних ресурсів для рішення тієї ж задачі: додаткові ядра CPU, GPU.

Читати далі →

Функції IPP c підтримкою бордюрів для обробки зображень в декількох потоках

У результаті тривалого використання навіть самих хороших програмних продуктів поступово виявляються ті або інші їх недоліки. Не стала винятком, і бібліотекаIntel Performance Primitives (IPP). До моменту виходу версії 8.0 з'ясувалися деякі проблеми, частина з яких відноситься до функцій обробки двовимірних зображень.
Для їх вирішення в IPP 8.0 багато функцій обробки зображень приведені до загального шаблону, що дозволяє обробляти зображення по блоках ( tiles), і, отже, ефективно распараллеливать на рівні додатка код, що містить виклики IPP функцій. Новий API відповідних IPP функцій підтримує бордюри декількох типів, не використовує внутрішнє виділення динамічної пам'яті, що дозволяє ділити зображення на фрагменти довільного розміру і обробляти ці фрагменти незалежно; спрощує використання і підвищує продуктивність ряду функцій. У цій статті докладно розглянуто новий API та приклади використання.

Читати далі →

Ресайз зображень в браузері. Все дуже погано

Якщо ви коли-небудь стикалися з завданням ресайза картинок в браузері, то ви напевно знаєте, що це дуже просто. У будь-якому сучасному браузері є такий елемент, як канва. На нього можна нанести зображення, задавши бажані розміри. П'ять рядків коду, картинка готова:

function resize(img, w, h) {
var canvas = document.createElement('canvas');
canvas.width = w;
canvas.height = h;
canvas.getContext('2d').drawImage(img, 0, 0, w, h);
return canvas;
}

Потім за допомогою цієї канви картинку можна зберегти в JPEG і, наприклад, відправити на сервер. У чому ж тут підступ? А справа в якості отриманого зображення. Якщо ви поставите поруч таку канву і звичайний елемент
<img>
, в який завантажено ця ж картинка, то ви побачите різницю.

img
Читати далі →

Pillow 2.7 - Істотні поліпшення якості і продуктивності

Першого січня 2015 року, за розкладом, вийшла нова версія бібліотеки для роботи із зображеннями Pillow 2.7. І так як багато зміни в ній були зроблені командою Uploadcare, ми раді представити вам розширену версію нотаток про релізі цієї версії.

Для початку згадаємо, з чого все почалося. Pillow — дружній форк (як називають його автори) популярної бібліотеки PIL, Python Imaging Library. Остання версія PIL 1.1.7 вийшла в 2009 році і в основному містила виправлення помилок. Спочатку Pillow замислювався як проект тільки з приведення в порядок складання ПІЛЬ, і розробники рекомендував відправляти всі баги, не пов'язані зі складанням, оригінальний PIL. Але час минав, PIL стрімко застарівала, багів не зменшувалася, тут ще Python 3 маячила на горизонті. Тому з версією Pillow 2.0 все змінилося. «Pillow 2.0.0 додає підтримку Python 3 і включає багато багфіксів зі всього інтернету» свідчить опис проекту на PyPI. І з тих пір понеслося. Кожні три місяці виходили версії з величезних кількістю багфіксів та іншими поліпшеннями від різних розробників. Найбільш значне нововведення за цей час було, мабуть, підтримка форматів WebP і JPEG2000. Тепер прийшов час наступного великого кроку.
Читати далі →

Функціональна обробка зображень в D

       image
 
Нещодавно я завершив переробку графічного пакета для моєї D бібліотеки. Натхненний модулями std.algorithm і std.range , я намагався досягти наступних цілей:
 
     
  • Уявити все у вигляді малих комбінованих компонентів
  •  
  • Уникнути неявного копіювання і переважно використовувати ледачі обчислення
  •  
  • Використовувати шаблони для поліпшення продуктивності та ефективності написання коду
  •  
 
Починаючи з першої версії, все компонети пакета обробки зображень були параметризованих типом кольору. Це не стандартний спосіб реалізації графічних бібліотек — більшість абстрагують конкретний тип кольору зображення через ООП інтерфейс, або просто конвертують всі зображення в єдиний формат пікселів, з якими далі працюють в пам'яті. Однак для більшості випадків це є тратою пам'яті і часу, зазвичай розробники заздалегідь знають в якому конкретно форматі буде представлено зображення, за винятком додатків, де графічні дані вводяться користувачем (наприклад, граф. Редактори). Замість цього моя бібліотека оголошує всі типи зображень як шаблони з типом-параметром для кольору.
 
Я вельми задоволений результатами роботи над бібліотекою, тому я хочу поділитися кількома цікавими моментами в даному пості.
 
 
Читати далі →