Мне нужно, чтобы я мог генерировать прозрачный PNG с очень длинным текстом (скажем, 3000 символов) менее чем за одну секунду.
Мои ограничения:
- текст должен быть автоматически обернут в соответствии с шириной .png и размером шрифта
- текст длиной 3000 символов генерируется менее чем за 1 с
- конвертер может работать с любым шрифтом .ttf
- конвертер может обрабатывать произвольный размер шрифта, пользовательскую плотность, цвет шрифта, межстрочный интервал, кернинг символов
- прозрачный фон
- должен работать на Unix
Я пробовал с Imagemagick с функцией 'caption', как в:
convert -background transparent -font /home/user/fonts/Arial.ttf -density 72 -pointsize 24 -kerning 0 -interline-spacing 0 -size 500x caption:'My very long text ...' output.png
Это работает как брелок для небольших текстов, но текст длиной в 3000 символов сгенерируется за 16 секунд, и я не смог найти способ его оптимизировать. Я пробовал каждый параметр «-quality» от 0 до 100, но безуспешно.
Например, 791 символ с качеством 15 занял 3,45 с. Примерно в то же время от 0 до 100.
convert -background transparent -font Arial.ttf -density 72 -pointsize 24 -size 500x caption:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec malesuada lorem ante, ut venenatis leo venenatis vitae. Phasellus imperdiet volutpat egestas. Nunc lobortis nunc ante, sagittis sagittis ex aliquet sed. Maecenas tempus velit eu leo cursus aliquam. Donec vel purus eget massa lacinia gravida vel vitae elit. Aliquam volutpat ex non purus aliquam, vel faucibus sem molestie. Quisque tincidunt, nulla sed fermentum condimentum, mauris arcu euismod nibh, nec lobortis tortor lorem id quam. Ut pretium lacinia risus id pretium. Suspendisse sit amet dolor ac odio convallis pulvinar vitae ac erat. Nam non congue tellus. Nulla laoreet at justo eget convallis. Phasellus rutrum turpis sed neque vulputate pharetra. Mauris fringilla tincidunt dui, in scelerisque urna sagittis sit amet." -quality 15 /tmp/test.png
quality 15 : 3.4526860713959 s
Он попробовал GraphicksMagick (как упоминалось в этой теме Медленный рендеринг шрифтов в ImageMagick ), но я не смог его скомпилировать с опцией --with-ttf, даже если на моем сервере установлен freefont2). Я упал здесь.
Я также попытался сгенерировать небольшой .svg, содержащий мой текст, и преобразовать его в .png с помощью инструмента rsvg
. Это действительно быстрее, но не соответствует моему ограничению автоматической упаковки (для создания самой упаковки потребуется другой фрагмент кода, чего я не хочу).
У меня сокращен таймфрейм, чтобы найти решение, поэтому я не могу самостоятельно протестировать любой другой возможный способ (попробуйте другой способ оптимизировать IM? Node.js с text2png или node-canvas? Маленьким Java-приложением? ...).
Кто-нибудь имел такие ограничения и мог бы мягко дать подсказку о рабочем решении?
Версия ImageMagick
Version: ImageMagick 6.8.9-9 Q16 x86_64 2018-11-11 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib
Версия GraphicksMagick протестирована
GraphicsMagick 1.3.31 2018-11-17 Q8 http://www.GraphicsMagick.org/
Copyright (C) 2002-2018 GraphicsMagick Group.