[英]imagick converting pdf to jpg throws an error
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,則可以正常工作。 但是某些文件無法上傳。 我不知道為什么
我收到此錯誤:
致命錯誤:未捕獲的異常'ImagickException'和消息'Postscript委托失敗'/data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/pdf/9.pdf':無此類文件或目錄@ pdf .c / ReadPDFImage / 611'位於/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-> readimage('/ data / web / virtu ...')#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('/ data / web / virtu ...')#3 /data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/adm/index.php(155 ):include('/ data / web / virtu ...')#4 {main}放在第92行的/data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/funkce.php中
感謝您提供示例-很大的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輸出,可以將其配置為輸出設備 。
我無法復制您看到的錯誤。 完全有可能是由於ImageMagick或GhostScript無法創建一些臨時文件,或者只是用盡了內存。
無論如何,答案是直接調用ghostscript,而不是必須跳過兩層抽象來處理非常大的文件。
有關如何從命令行調用GS的明確說明
如果要從PHP調用它,則需要使用exec或其他功能之一在命令行上調用內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.