【发布时间】:2019-06-18 09:25:23
【问题描述】:
我的需要是能够在不到一秒的时间内生成一个相当长的文本(比如 3000 个字符)的透明 PNG。
我的限制:
- 文本必须根据 .png 的宽度和字体的大小自动换行
- 在不到 1 秒的时间内生成 3000 个字符的文本
- 转换器可以处理任何 .ttf 字体
- 转换器可以处理自定义字体pointsize、自定义密度、字体颜色、行距、字符紧缩
- 透明背景
- 必须在 Unix 上工作
我尝试使用带有“标题”功能的 Imagemagick,如下所示:
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 秒内生成,我找不到优化它的方法。我尝试了从 0 到 100 的每一个“质量”选项,但没有任何成功。
例如,质量为 15 的 791 个字符需要 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(正如在这个线程 Slow font rendering in ImageMagick 中提到的那样),但即使我的服务器上安装了 freefont2,我也无法使用 --with-ttf 选项编译它)。我掉到这里了。
我还尝试生成一个包含我的文本的小 .svg 并使用 rsvg 工具将其转换为 .png。它确实更快,但不符合我对自动包装的约束(它需要另一段代码来制作包装本身,这是我不想要的)。
我找到解决方案的时间缩短了,所以我自己无法测试所有其他可能的方法(尝试另一种优化 IM 的方法?使用 text2png 或 node-canvas 的 node.js ?一个小型 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.
【问题讨论】:
-
您可以尝试使用 Pango,您将使用
convert ... pango:@XXX result.png其中XXX是包含您的 3,000 个字符的文件 -
我尝试了常规技术(
-depth 8和+antialias并编写 GIF 而不是 PNG 并将质量设置为 10 的倍数以及我所知道的一切)但没有任何帮助。
标签: unix text imagemagick png