ImageMagick 中的字体渲染缓慢

2023-12-01

我正在使用以下 ImageMagick 脚本(使用 Imagick for PHP)来生成字体图像。该脚本大约需要 0.1 秒来生成约 30 个字符、大小为 48 的图像。目标速度约为 0.01 秒。恐怕切换到 GD 库可能是实现这一目标的唯一方法(我读过hereGD 中的文本生成速度要快得多)。然而,如果没有重力和修剪等特征,使用 GD 生成此类图像要麻烦得多。有没有人看到这段代码中有明显的瓶颈,或者是时候切换库了?

$image = new Imagick();
$draw = new ImagickDraw();
$background = new ImagickPixel('none');
$draw->setFont($font);
$draw->setFontSize($size);
$draw->setFillColor(new ImagickPixel('#'.$color));
$draw->setGravity(Imagick::GRAVITY_CENTER);
$draw->annotation(0, 0, $text);
$image->newImage(5*mb_strlen($text, 'UTF-8')*$size, 5*$size, $background);
$image->setImageFormat('png');
$image->drawImage($draw);
$image->trimImage(0);
$image->writeImage($path_server['dirname'].'/'.$path_server['basename']);

答案was切换库,但不切换到 GD。相反,我切换到图形魔术师,它是 ImageMagick 的一个分支,专注于效率和优化。据 GraphicsMagick 网站称,一些世界上最大的照片网站(包括 Flickr 和 Etsy)都在使用它。以下 GraphicsMagick 代码运行大约快 10 倍比相应的 ImageMagick 代码要好,它使我能够达到每次操作 0.01 秒的目标(实际上更接近 0.008 秒):

$image = new Gmagick();
$draw = new GmagickDraw();
$draw->setfont($font);
$draw->setfontsize($size);
$draw->setfillcolor('#'.$color);
$draw->setgravity(Gmagick::GRAVITY_CENTER);
$draw->annotate(0, 0, mb_ereg_replace('%', '%%', $text));
$image->newimage(5*mb_strlen($text)*$size, 5*$size, 'none', 'png');
$image->drawimage($draw);
$image->trimimage(0);
$image->writeimage($path_server['dirname'].'/'.$path_server['basename']);

您会注意到还有一些其他不错的功能。例如,不必通过创建颜色来定义颜色ImagickPixel对象,大多数函数只是将颜色作为字符串。此外,GraphicsMagick 中的函数名称似乎更加一致(annotate代替注解)。不用说,我对此非常满意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ImageMagick 中的字体渲染缓慢 的相关文章

  • 添加和检索一些元数据到 png 图像

    I need to add some metadata to a lot of images For example I need to add the position of the right eye and left eye to t
  • PHP ImageMagick setColorspace 不起作用[重复]

    这个问题在这里已经有答案了 我正在尝试通过使用以下代码更改色彩空间来将图像转换为黑白图像 im new Imagick image png im gt setImageColorspace Imagick COLORSPACE GRAY i
  • NodeJS 产生 ENOENT 错误

    我在远程服务器上使用 GM 时遇到错误 我想当我尝试写入文件时遇到问题 它在我的本地服务器上完美运行 我的代码 gm in page 0 0 in var www myapp public images instabox jpg in pa
  • python linux - 显示文件名作为查看器窗口标题的图像

    当我使用 PIL Image 显示图像时 它会打开一个 imagemagick 窗口 但标题是一些乱码名称 例如 tmpWbfj48Bfjf 如何使图像文件名成为查看器窗口的标题 使用标题属性 Image show title Your T
  • 如何使用imagick的writeImage()函数?

    如果我将脚本保存在与正在操作的图像相同的目录中 则此方法有效 并且结果图像 foo jpg 也在同一位置生成 但是 如果脚本位于一个位置 而我希望使用的图像位于另一个位置 而我希望保存缩略图的位置位于其他位置 那么如何指定这些路径呢 做这样
  • 来自相机的原始图像数据,如“645 PRO”

    不久前我已经问过这个问题并且我也得到了很好的答案 我一直在这个论坛上上下搜索 但找不到我想要的东西 真的需要 我想从相机获取原始图像数据 至目前为止 我试图从中获取 imageDataSampleBuffer 中的数据 方法 capture
  • 在 Mac OS X 中使用 PHP 模块安装 ImageMagick Brew

    我已经使用安装了 ImageMagickbrew install imagemagick 这一切都运行良好 我可以从终端 命令行运行任何 ImageMagick 命令 现在 当我尝试在 PHP 中使用 ImageMagick 类时 出现错误
  • 以编程方式检测图像是否有边框(返回布尔值)

    首先 我读过这篇文章 如何以编程方式检测图像边框 https stackoverflow com questions 1954742 how to detect an image border programmatically不过 他似乎在
  • ImageMagick 没有此图像格式的解码委托

    我在 Windows 和 wamp 服务器下工作 这是我使用 Imagick 的 PHP 代码 imagick new Imagick SERVER DOCUMENT ROOT this gt name where SERVER DOCUM
  • 在 OS X 下将 ImageMagick 编译为 64 位?

    我正在尝试安装moddims http code google com p moddims 在 OS X 上 请参阅上一个问题 https stackoverflow com questions 1185106 how do i confi
  • 如何在 mac os x 上安装 Image::Magick?

    我尝试用brew安装 brew install imagemagick 安装似乎已成功完成 然而 当尝试 use Image Magick 我收到以下错误消息 Can t locate Image Magick pm in INC 我不太了
  • 如何在AWS Lambda函数中使用ImageMagick“drawtext”方法?

    我目前正在使用 Node gm 模块显示的 ImageMagick 7 运行 Node 8 Lambda 函数 https github com aeckmann gm https github com aheckmann gm 来注释一些
  • 将多页 PDF 转换为单个图像

    我必须将多页 PDF 文档转换为 png 图像 我尝试使用 ImageMagick 但无法获得最终结果 convert document pdf document png or convert adjoin document pdf doc
  • 将 pdf 图像转换为 jpg 图像的最快方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试将多个 pdf 10k 转换为 jpg 图像并从中提取文本 我目前正在使用pdf2imagepython 库 但它相当慢 有没有比这更
  • 将 Magick::Image 转换为 cv::Mat

    我正在尝试将通过 Magick 从 GIF 加载的图像转换为cv Mat 我已经从cv Mat to Magick Image但似乎无法找到如何从 Magick 中的图像中提取数据以便将其加载到 Mat 中 最好的方法是什么 供参考 反过来
  • bash 调整图像尺寸以适合特定大小

    我到处搜索但找不到这个问题的答案 我想精确输出一个文件夹中的所有图像 大小为 50Kb 并保持原始的宽高比 I tried ImageMagick并将大小调整为 250x250 例如 但它对我不起作用 它所做的是更改第一个尺寸并适应另一个尺
  • 使用 ImageMagick 进行 SVG 转换无法正确应用翻译

    我使用的是 Mac OS X 10 5 的 Mac 我正在尝试使用 ImageMagick 来转换SVG http en wikipedia org wiki Scalable Vector Graphics文件到一个PNG http en
  • 将 PDF 转换为 JPG 时质量低

    我正在尝试使用 Imagemagic RMAgick 将 PDF 文档转换为图像 原始 PDF 也是从图像创建的 不是原生矢量 PDF image Magick Image from blob original pdf self forma
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 使用 PHP 将 SVG 图像转换为 PNG

    我正在开发一个网络项目 该项目涉及动态生成的美国地图 根据一组数据为不同的州着色 这个 SVG 文件为我提供了一张很好的美国空白地图 并且很容易更改每个州的颜色 困难在于 IE 浏览器不支持 SVG 因此为了让我使用 svg 提供的便捷语法

随机推荐

  • 如何使用多个配置构建同一项目 C# VisualStudio2012

    我有很多项目的解决方案 我想构建多个具有多个配置设置的项目 e g ProjectA 设置为目标框架 3 5 和平台目标 x86 输出程序集名称是 ProjectA dll 我想在单击构建按钮时在多个输出文件中构建项目 ProjectA 3
  • Java 8 Lambda 表达式——方法重载疑惑

    我正在尝试学习 Lambda 表达式 interface MathOperartor对于 int 和 float 类型 operate 已重载 我确信这应该可以使用 Lambda 表达式来完成 但似乎不太清楚问题出在哪里 public st
  • Quartz.net 和 Common.Logging - 使用 Log4Net

    我在 Windows 服务中使用 Quartz net 目前 触发器没有触发 我想使用日志记录来找出原因 我已经编辑了 Windows 服务的配置文件
  • .htaccess 将所有流量重定向到一页(410 消失)

    我们有一个即将关门的客户 我们希望将进入其域的所有流量重定向到新页面index html 并在 img 子目录中包含一些图像 该页面解释了发生的情况 当前客户对当前订单的期望等 我读过有关可能使用 HTTP 410 Gone 作为从技术上向
  • Python 3.4 中的 YouTube API UnicodeEncodeError

    我正在探索 YouTube 数据 API 发现编码不正确的结果阻碍了我 在检索到标题中包含未映射字符的集合之前 我得到了很好的结果 我的代码现在是 为你们好人清理了一点 import urllib request import urllib
  • WPF 应用程序中的 AxWindowsMediaPlayer 大小

    我正在使用一个AxWindowsMediaPlayer in a WindowsFormsHost在 WPF 应用程序中 我在调整控件大小时遇到 问题 我需要隐藏视频部分 只保留带有按钮和搜索栏的部分 因为我运行音频 我需要调整Window
  • firefox document.getElementById 只获取第一个复选框?

    这个简单的代码检查是否至少标记了一个复选框 当我尝试使用 Firefox 获取复选框数组时 我没有 我只是第一个 相同的代码在 IE 中运行良好 我是否需要为复选框元素创建不同的 ID 并迭代它们 感谢您的帮助
  • 反转字母表

    我正在尝试修改一段文本以应用以下翻译 before abcdefghijqlmnopqrstuvwxyz after zyxwvutsrqponmlkjihgfedcba 也就是说 每个a成为一个z each b成为一个y each c成为
  • 为什么不鼓励在 Java EE 容器中生成线程?

    关于 Java EE 开发 我学到的第一件事就是我不应该在 Java EE 容器内生成自己的线程 但转念一想 我又不知道原因 你能清楚地解释一下为什么不鼓励吗 我确信大多数企业应用程序都需要某种异步作业 例如邮件守护程序 空闲会话 清理作业
  • 为什么有序列表的 sapply 会输出我的内容两次

    我使用以下代码将文件列表存储在列表中 filesList lt list files path Users myPath data pattern csv 然后我想在没有索引的情况下输出它 通常以形式出现 1 在每一行的开头 所以我尝试了这
  • R 中的环境、mapply 和 get

    Let x lt 2在全局环境中 x lt 2 x 1 2 Let a是一个定义另一个函数的函数x本地并使用get a lt function x lt 1 get x 该函数正确得到x从当地环境来看 a 1 1 现在我们定义一个函数b如下
  • Fluentd apache 格式 [警告]:模式不匹配:

    在我的 etc Fluent Fluent conf 中
  • 如何在不使用 FilePicker 的情况下在固定位置保存和加载 InkCanvas gif 文件

    我想保存并加载InkCanvas gif文件没有FilePicker I saw a sample using FilePicker 但我想保存gif当我单击 保存 按钮时自动文件 例如 当我保存 1InkCanvas gif file 然
  • 安装 PyOpenGLContext 时出现问题(语法错误)

    我最近决定用 python 学习 OpenGL 我使用安装了 PyOpenGLpip3 install PyOpenGl PyOpenGl accelerate 然后我正要遵循一个教程对于 PyOpenGL 第一项是安装 PyOpenGLC
  • 带有垂直行的 HTML 表格

    如何在 HTML 中制作垂直表格 垂直 我的意思是行将垂直 表标题位于左侧 我还需要它的方式 这样我就可以像在普通表中一样访问这些行 在本例中是垂直的 tr 这是因为我动态获取一行的数据 如 A 行 并将其插入表中 我使用 angularJ
  • 将时间格式设置为“24 小时军用时间”?

    我正在将一些 SQL Server 2000 代码更新到 SQL Server 2008R2 并且有一个看起来很像的函数this用于将时间转换为 24 小时格式 在 T SQL 中执行此操作的更酷 更聪明的方法是什么 如果你想要的只是军事时
  • 对不同类型对象的列表进行排序

    我有一个对象列表 其中包含不同类型的对象 但单个属性在所有对象中都是通用的 列表包含 Field 类 Button 类 Page 类等对象 但其中一个属性是通用的 即 sequence no 我想根据 sequence no 对该列表进行排
  • NPM 包错误 - 'newman' 未被识别为内部或外部命令

    我已在我的 64 位 Win 10 计算机中安装了最新版本的 Newman 3 10 0 C Users ABC gt npm install g newman C Users ABC AppData Roaming npm newman
  • 将方法传递给后台工作者 dowork

    在下面的代码中 有没有一种方法可以不总是订阅 updateWorker DoWork 方法 而是向其传递这样的方法 public void GetUpdates SomeObject blah updateWorker DoWork new
  • ImageMagick 中的字体渲染缓慢

    我正在使用以下 ImageMagick 脚本 使用 Imagick for PHP 来生成字体图像 该脚本大约需要 0 1 秒来生成约 30 个字符 大小为 48 的图像 目标速度约为 0 01 秒 恐怕切换到 GD 库可能是实现这一目标的