for ($i = 0; $i < $int; $i++) {
$im = new imagick();
// $im->readimage($soubory."[".$i."]");
$im->setResolution(300, 300);
$im->readImage($soubory . "[" . $i . "]");
$im->resampleImage(150, 150, imagick::FILTER_UNDEFINED, 1);
$im->resizeImage(512, 700, Imagick::FILTER_LANCZOS, 0);
$im->setImageFormat('jpeg');
$im->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
$im->setImageFormat('jpg');
$i = sprintf("%03s", $i);
$im->writeImage('../pdf/publisher/' . $select . '/x-' . $i . '.jpg');
$im->clear();
$im->destroy();
if ($i == 000) {
$preview = '../pdf/publisher/' . $select . '/x-' . $i . '.jpg';
}
}
如果我的文件大小小于4 MB,那么它的效果非常好。但有些文件没有上传。我不知道为什么。
我收到此错误:
致命错误:未捕获的异常&#39; ImagickException&#39;消息&#39; Postscript委托失败`/data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/pdf/9.pdf' ;:没有这样的文件或目录@ pdf.c / ReadPDFImage / 611&#39;在/data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/funkce.php:92堆栈跟踪:#0 / data / web / virtuals / 69845 / virtual / www / domains / nabytek-novydomov .cz / funkce.php(92):Imagick-&gt; readimage(&#39; / data / web / virtu ...&#39;)#1 / data / web / virtuals / 69845 / virtual / www / domains /nabytek-novydomov.cz/adm/includes/pdf_publisher.php(4):uploadpdf(NULL)#2 /data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/adm/includes/container .php(17):include(&#39; / data / web / virtu ...&#39;)#3 /data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/adm /index.php(155):include /&#39; / data / web / virtu ...&#39;)#data / web / virtuals / 69845 / virtual / www / domains /中引发#4 {main}第92行的nabytek-novydomov.cz/funkce.php
答案 0 :(得分:0)
感谢您提供示例 - 这是一个非常大的pdf。使用ImageMagick打开它并不会给我一个错误,但是PDF也没有正确呈现。
ImageMagick实际上通过将渲染委托给GhostScript程序来渲染PDF。我认为你最好直接调用GhostScript,将PDF渲染为PNG,然后能够以合理的格式操作图像,例如。
要生成所有页面的PNG文件,您应该能够从命令行调用Ghostscript,只要它在您的路径中设置为:
gs \
-sDEVICE=png16m \
-o %03d.png \
-r300 \
casopis.pdf
或者只选择某些页面。
gs \
-sDEVICE=png16m \
-o %03d.png \
-dFirstPage=10 \
-dLastPage=13 \
-r300 \
casopis.pdf
如果您真的想要Jpeg输出,可以将其配置为output device。
我还没有能够复制你看到的错误。由于ImageMagick或GhostScript无法创建一些临时文件或只是内存不足,完全有可能。
无论如何,答案是直接调用ghostscript,而不是跳过两层抽象来处理非常大的文件。
有关如何从命令行调用GS的明确说明
如果你想从PHP调用它,你需要使用exec或其他一个函数在命令行上调用东西。