使用 ImageMagick 将 PDF 转换为 PNG 或 JPEG 非常非常慢

2023-12-11

我有一个使用 PHP 和 ImageMagick 的 PDF 到 PNG 转换脚本,但我遇到了转换速度问题。

我知道它是有效的,因为对于非常小的 PDF,转换所需的时间并不是那么长,但是对于 250kb 文件(实际上仍然不是那么大),转换需要超过 20 分钟。

这是 PHP:

//***** GET PATH TO IMAGEMAGICK *****
$path_to_imagemagick = trim(`which convert`);

//***** PATH TO PDF TO CONVERT *****
$path_to_pdf = getcwd() . "/pdf/myfile.pdf[0]";

//***** PATH TO OUTPUT TO *****
$output_path = getcwd() . "/pdfimage/test_converted.png";

@exec($path_to_imagemagick . " -density 72 -quality 60 -resize 150x " . $path_to_pdf . " " . $output_path);

我可以更改任何设置以加快速度吗?

如果有帮助,图像不必是 PNG。如果 JPEG 速度更快,我很乐意接受。


ImageMagick 无法自行将 PDF 转换为光栅图像at all.

ImageMagick 使用delegate对于这项工作:该代表是鬼脚本。如果您没有在与 ImageMagick 相同的系统上安装 Ghostscript,则 PDF 转换将通过convert行不通的。

为了提高速度,请勿使用 ImageMagick 进行 PDF -> 光栅图像转换。相反,直接使用 Ghostscript(也可以通过 PHP)。

JPEG 输出的命令行:

gs                                 \
  -o ./pdfimage/test_converted.jpg \
  -sDEVICE=jpeg                    \
  -dJPEGQ=60                       \
  -r72                             \
  -dLastPage=1                     \
   pdf/myfile.pdf

PNG 输出的命令行:

gs                                 \
  -o ./pdfimage/test_converted.png \
  -sDEVICE=pngalpha                \
  -dLastPage=1                     \
  -r72                             \
   pdf/myfile.pdf 

这两个命令都会为您提供未缩放的输出。

要缩小输出,您可以使用类似的东西

gs                                 \
  -o ./pdfimage/test_converted.png \
  -sDEVICE=pngalpha                \
  -dLastPage=1                     \
  -r72                             \
  -dDEVICEWIDTHPOINTS=150          \
  -dDEVICEHEIGHTPOINTS=150         \
  -dPDFFitPage                     \
   pdf/myfile.pdf 

另请注意:你用了一个-quality 60PNG 输出命令的设置。但-quality对于 JPEG 和-quality对于 PNG 输出来说,ImageMagick 确实具有完全不同的含义(您可能没有意识到)。也可以看看这个答案有关于此的一些详细信息。

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

使用 ImageMagick 将 PDF 转换为 PNG 或 JPEG 非常非常慢 的相关文章

  • 如何使用CSS将背景图像放入选择选项标签中

    我有一个从 json 响应接收的国家 地区下拉列表 并且想要在国家 地区名称旁边添加相应的国家 地区国旗图标 也从 json 响应获取图像 我已经尝试了不同的 jQuery 和 bootstrap 插件 但他们所做的是破坏我以前的选择框样式
  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • Smarty输出空白页

    已解决 模板文件错误 我有这样的 Smarty 设置 require once smarty Smarty class php smarty new Smarty smarty gt compile dir compile dir smar
  • 如何使用 Facebook SDK API 为页面/网址“点赞”?

    我正在使用这段代码 facebook gt api me likes post array url gt http www google com 我收到以下错误 Fatal error Uncaught OAuthException 200
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • 在 Laravel 5 中截断表

    描述 我有一个充满测试数据的表 有时 我想清除它以获取新数据 我可以在 DBMS 应用程序中执行截断 例如MySQL 工作台 但我试图在我的应用程序中实现它 Goal 创建一个按钮 单击时截断数据库中的表 这是我的步骤 1 声明一条路线 R
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • 为什么验证不起作用并跳转到另一个页面?

    我写了一个customer display php来验证数据 到目前为止只有名字 但无论名字字段是否为空 网页都会跳转到customer search php并且没有更改数据库中的信息 为什么
  • PHP:读取字体文件的 TrueType/OpenType 元数据

    如何阅读字体详细信息 例如 字体在其元数据中包含版权 姓氏 设计者 版本等信息 我还希望脚本能够计算文件中的字形数量 并返回字体支持的语言 例如 典型的字体可能包含西方语言 瑞典语和罗马语言支持 并具有数百个字形 它应该支持 truetyp
  • 如何在 yii2 中使用两个不同的模型登录或切换身份类别?

    我想允许用户从两个不同的模型登录 配置文件 user gt identityClass gt app models User one more class here enableAutoLogin gt false authTimeout
  • WordPress 分页自定义帖子类型

    我有一个名为 新闻 的页面 使用页面模板page newslist php 它应该显示来自自定义帖子类型 也称为新闻 的帖子 我意识到两者具有相同的名称会导致问题 因此在注册自定义帖子类型时 我进行了重写以将其与页面区分开来 rewrite
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • 如何仅使用 PHP5 RecursiveDirectoryIterator 类递归显示具有特定文件类型的文件夹和子文件夹

    您好 我正在尝试使用 FilterIterator 上的扩展来获取 RecursiveDirectoryIterator 类 但由于某种原因 它仅在根目录上进行迭代 我的代码是这样的 class fileTypeFilter extends
  • URL 中的 %2F 中断并且未引用所需的 .php 文件 [重复]

    这个问题在这里已经有答案了 我需要将 作为变量作为 URL 的一部分传递 我的结构如下所示 www domain com listings page 1 city Burnaby South type Townhome bedroom 2
  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • 保存多对多关系,同步/附加不存在?

    我有以下两个多对多关系的模型 use Illuminate Database Eloquent Model class Permission extends Model The database table used by the mode
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入

随机推荐

  • Javascript 事件,捕获有效,而冒泡则不行

    我对 JS 事件传播的理解是 事件首先在 DOM 树中 捕获 然后 冒泡 回来 沿途触发处理程序 div nothing yet div
  • NextJS htaccess 设置,URL 上不带尾部斜杠

    在 NextJS 上发现我的网站存在问题 在开发过程中 我使用按钮导航该网站并手动更改浏览器地址栏 碰巧我不小心在末尾添加了一个斜杠 但我的本地主机服务器将其删除 一切正常 但当我将静态应用程序上传到托管时 一切都发生了变化 重新加载页面时
  • AngularJS - 初始化日期输入

    我有一个应用程序 其中有几个日期字段需要接受来自用户和数据库的值 I found this解决方案 但仍然收到错误消息 错误 ngModel datefmt http errors angularjs org 1 5 8 ngModel d
  • 调试 u-sql 作业

    我想知道是否有任何提示和技巧来查找数据湖分析工作中的错误 大多数时候错误消息似乎不是很详细 当尝试从 CSV 文件中提取时 我经常收到这样的错误 顶点故障触发作业快速中止 顶点失败 SV1 Extract 0 且 gt 错误 顶点用户代码错
  • 使用 8 张图像在 UIImageView 周围创建边框

    I have 8 images I made 4 images for each of the corners and 4 images for each of the sides of UIImageView Now how on Ear
  • 在 Spring 中创建临时 JMS jms 主题

    我正在尝试重构一些遗留代码以使用 Spring 处理与大型机服务的 jms 连接 我需要连接为大型机服务回复创建一个临时主题并将其设置为message setJMSReplyTo replyTo 在我发送消息之前的消息中 谁能提供这方面的例
  • Logstash 中需要 #、输入、过滤器、输出之一

    我试图通过简单地执行文档中给出的命令来回显所输入的内容来使 Logstash 安装工作 但这给了我以下错误 我的命令 C logstash 1 4 0 bin gt logstash bat agent e input stdin outp
  • 如何使用 Laravel 的 Paginate() 输出当前迭代?

    Laravel 5 2 应用程序 我的控制器中有一个函数 它使用 order by 子句查询我的数据库 然后我对其进行分页 public function foo results DB orderBy name desc gt pagina
  • 如何确保 Node.js 在 MongoDB 连接断开后继续运行?

    我在 Express 中有一个错误处理中间件 它尝试捕获所有传入的错误 app use function err req res next console error err stack res status 500 res render
  • 将图像从 azure blob 存储转换为 Base64?

    我正在尝试将图像从 Azure blob 存储转换为 base64 private static string FromAzureToBase64 string azureUri Uri blobUri new Uri azureUri C
  • 将 R 县地图叠加到州地图上

    R新手在这里 如果我第一次使用map state 我该如何使用map county ylim xlim 但像这样抵消它 现在 我正在使用 imagemagickcomposite gravity southwest 合并 2 个 PNG 文
  • 如何在 Vim 中为命令创建别名?

    Vim 是我编程时首选的文本编辑器 因此我总是遇到一个特别烦人的问题 通常 当我快速需要保存缓冲区并继续执行其他杂项任务时 我会执行典型的操作 w 然而 我总是 似乎超过 50 的时间 设法利用这一点 w 很自然地 Vim 对我大喊大叫 因
  • 带边框的纯 css 树

    我正在尝试用纯 CSS 创建一棵带有缩进的树 我一直在尝试使用类似的东西 ul tree ul padding left 5px 但是我想在列表中的每个项目之间进行分隔 如果我使用上面的代码 分隔栏也会缩进 所以它不太好 这是我当前的代码
  • 带切换功能的 SwiftUI onDelete 列表

    这是我对这个问题的第三个问题 到目前为止还没有不崩溃的解决方案 我想用切换来滑动删除列表 我的 简化的 代码如下所示 struct Item Identifiable var id UUID var isOn Bool struct Con
  • Windows C 运行时 _close(fd) 未关闭文件

    我们在使用 C 和 C 混合编写的 Windows 应用程序进行生产时遇到问题 其中 MoveFileEx 偶尔会报告 该进程无法访问该文件 因为该文件正在被另一个进程使用 这个问题很少见 但最近我们已经能够在我们的开发环境中重现该问题 发
  • 如何在 JavaScript 中重新定义数组上的 + 运算符?

    假设点是使用 JavaScript 表示的Array as x y 我如何定义 点上的运算符 1 2 5 10 6 12 JavaScript 没有覆盖内置算术运算符的功能 您可以通过覆盖一些有限的技巧来实现 valueOf and toS
  • 如何使用 Java 将 BsonDocument 对象写入文件并再次读取它

    我想将 BsonDocument 输出到文件系统 而不是 mongodb 然后使用 java 再次读取它 但目前的BasicBSONencoder仅支持旧版本的BSONObject 如何将BsonDocument编码为二进制 或者有什么方法
  • 如何在整个子查询上使用 group_concat?

    无需进行不必要的比较 我想获得一系列行的 md5 哈希值 由于带宽限制 我希望它发生在服务器端 这有效 create table some table id int auto increment col1 varchar 1 col2 in
  • 如何删除数据框列的标题

    我想出了一个像这样的数据框 我想知道我们如何更改或删除 id 和 date 因为它们只是索引和列的名称 id col1 col2 clo3 date 2000 01 03 55 500000 NaN NaN 2000 01 04 52 81
  • 使用 ImageMagick 将 PDF 转换为 PNG 或 JPEG 非常非常慢

    我有一个使用 PHP 和 ImageMagick 的 PDF 到 PNG 转换脚本 但我遇到了转换速度问题 我知道它是有效的 因为对于非常小的 PDF 转换所需的时间并不是那么长 但是对于 250kb 文件 实际上仍然不是那么大 转换需要超