Чи пропонує Image Magick потоковий API?


1

У мене є сервер Node.js (не має значення), який здійснює маніпулювання зображеннями з ImageMagick. В основному я можу розмістити зображення на сервері, і воно відповість трансформованим зображенням.

Зараз я просто записую POSTed зображення у файл і запускаю ImageMagick як дочірній процес, який записує перетворене зображення в новий файл, а потім надсилаю цей новий файл в POSTer. Я хотів би уникати запису на диск, щоб прискорити роботу. Чи може цей процес ImageMagick прийняти потоковий вхід і дати мені потік як вихід?

Як приклад, це одна з найскладніших команд, яку я зараз використовую:

/usr/local/opt/imagemagick/bin/convert \( '/Users/shawn/Work/vigour-img/originals/7ajy06' -resize '150x150^' -gravity 'Center' -crop '150x150+0+0' \) \( '/Users/shawn/Work/vigour-img/images/avatarMask.png' -resize '150x150' -gravity 'Center' \) -compose 'CopyOpacity' -composite '/Users/shawn/Work/vigour-img/out/1bl6jm9.png'

Це залежить від /Users/shawn/Work/vigour-img/originals/7ajy06і /Users/shawn/Work/vigour-img/images/avatarMask.pngіснуючі на диску і записує результат /Users/shawn/Work/vigour-img/out/1bl6jm9.png.

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


Хороше запитання, але… “… таким чином значно покращуючи продуктивність (я думаю).” Це досить велике припущення. Оскільки ImageMagick виконує всю обробку оперативної пам’яті, що трапиться, якщо надходить багато запитів, у яких немає місця для дихання, щоб записати на диск, щоб звільнити пам'ять? Потім оперативна пам’ять поміняється на диск, а потім… Шість з одного, півдесятка іншого. Але в пакет ImageMagick є streamкоманда, яка може допомогти деякому аспекту цього процесу.
JakeGould

Я не знаю, записування у файл та читання цього файлу та надсилання його через http здається довше, ніж запис безпосередньо у відповідь http ... У обох випадках ImageMagich буде мати деяке зображення в пам'яті протягом певного часу (за винятком випадків, якщо Я використовую цю streamкоманду, яку ви згадуєте). Запис у файл або запис у відповідь http має бути майже однаковим ... Щодо streamкоманди, мені незрозуміло, як це використовувати в моєму випадку. Мені доведеться витратити більше часу на це і спробувати речі. Дякую за пораду.
Шон

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.