【发布时间】:2015-02-19 23:24:24
【问题描述】:
我已经在 Windows 上使用 imagick PHP 的 DLL 安装了 ImageMagick。
我需要将 PDF 转换为 JPEG。所以我也安装了 Ghostcript。
如果我运行这个命令:
convert rose.pdf rose.jpg
效果很好。但如果我尝试在我的网络环境中使用 PHP 重现同样的功能:
$im = new imagick('test_pdf.pdf[0]' );
$im->setImageColorspace(255);
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);
$im->setImageFormat('pdf');
$im->writeImage('thumb.jpg');
然后我的页面就挂了。
我假设 Imagick PHP 无法使用 PDF 转为 JPEG,因为它不知道如何使用 Ghostscript 库 gslib。
但是,使用此代码,我可以将 PNG 转换为 JPEG。
我尝试在delegates.xml 中进行编辑,但我不确定应该如何进行。
以下是我的delegates.xml 中的相关行:
<delegate decode="pdf" encode="eps" mode="bi" \
command=""@PSDelegate@" \
-q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
-dEPSCrop \
-sDEVICE=epswrite "-sOutputFile=%o" -- "%i""/>
<delegate decode="pdf" encode="ps" mode="bi" \
command=""@PSDelegate@" \
-q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
-dEPSCrop -dAlignToPixels=0 -dGridFitTT=2 \
-sDEVICE=pswrite "-sOutputFile=%o" -- "%i""/>
更新
我尝试使用 -verbose 运行 ImageMagick 以获得更多提示:
convert -verbose 2.pdf 1.jpg
结果:
[ghostscript library] Files/gs/gs9.15/bin/gswin64c.exe" -q -dQUIET -dSAFER -dBATCH
-dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dEPSCrop -dAlignToPixels=0 -dGridFitTT=2
"-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72"
"-sOutputFile=C:/Users/Usuario/AppData/Local/Temp/magick-PjagmlB-%08d"
"-fC:/Users/Usuario/AppData/Local/Temp/magick-1l5fdY8X"
"-fC:/Users/Usuario/AppData/Local/Temp/magick-Fr-GsA3"
C:/Users/Usuario/AppData/Local/Temp/magick-_PjagmlB-000000
1 PNG 609x791 609x791+0+0 8-bit DirectClass 47.8KB 0.016u 0:00.031
2.pdf PDF 609x791 609x791+0+0 16-bit DirectClass 47.8KB 0.000u 0:00.031
2.pdf=>1.jpg PDF 609x791 609x791+0+0 16-bit DirectClass 131KB 0.031u 0:00.046 –
Apache 错误日志的结果
[2014 年 12 月 22 日星期一 09:11:59.022854] [mpm_winnt:notice] [pid 6600:tid 520] AH00428:父级:子进程 6552 以状态 255 退出 -- 正在重新启动。 [2014 年 12 月 22 日星期一 09:11:59.170587] [mpm_winnt:notice] [pid 6600:tid 520] AH00455: Apache/2.4.9 (Win64) PHP/5.5.12 已配置 -- 恢复正常操作 -- PHP/5.5。 12已配置——恢复正常操作 [2014 年 12 月 22 日星期一 09:11:59.170587] [mpm_winnt:notice] [pid 6600:tid 520] AH00456:Apache Lounge VC11 服务器建成时间:2014 年 3 月 16 日 12:42:59 [2014 年 12 月 22 日星期一 09:11:59.170587] [core:notice] [pid 6600:tid 520] AH00094:命令行:'c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\ httpd.exe -d C:/wamp/bin/apache/apache2.4.9' [Mon Dec 22 09:11:59.170587 2014] [mpm_winnt:notice] [pid 6600:tid 520] AH00418: Parent: Created child process 4484 [2014 年 12 月 22 日星期一 09:11:59.807339] [mpm_winnt:notice] [pid 4484:tid 436] AH00354:子级:启动 64 个工作线程。我在 PDF 加载时创建了一个 var_dump
$im = new imagick( __DIR__ . DIRECTORY_SEPARATOR .'test_pdf.pdf' );
var_dump($im);die;
但是在进入var_dump之前页面就关闭了。
测试场景
- 在命令行上使用 PHP 将 PDF 转换为 JPG > 工作
- 在浏览器中使用 PHP-FPM 将 PDF 转换为 JPG > 不起作用(上述错误)
- 在浏览器中使用 PHP-FPM 将 JPG 转为 PDF > 有效
【问题讨论】:
-
您能否将
-verbose添加到您成功的PDF 转换命令中?运行convert -verbose rose.pdf rose.jpg。您将看到 ImageMagick 调用的 Ghostscript 命令。也许这会提示您在 Imagick 设置中需要更改的内容... -
奇怪...我觉得
[ghostscript library] Files/gs/gs9.15/bin/gswin64c.exe"部分有点奇怪。你确定你复制粘贴正确吗?!? -- 我猜这应该是"C:/Program Files/gs/gs9.15/bin/gswin64c.exe" -
是的,它的复制粘贴包括 [ghostscript 库] 我有同样的疑问,我尝试使用 Files/gs/gs9.15/bin/gswin64c.ex 但我没有成功,我现在将尝试使用 C:/Program 文件
-
“我假设...”不要假设。您的日志文件中的实际错误是什么?
-
我在运行 convert -verbose 2.pdf 1.jpg 时没有错误,但是当我使用 php 代码转换 PDF 时,页面会关闭。
标签: php imagemagick ghostscript imagick