Я использую сценарий litte для преобразования PDF в JPG. Это работает, но качество очень плохое.
Сценарий:
$im = new imagick( 'document.pdf[ 0]' ); $im->setImageColorspace(255); $im->setResolution(300, 300); $im->setCompressionQuality(95); $im->setImageFormat('jpeg'); $im->writeImage('thumb.jpg'); $im->clear(); $im->destroy();
Еще одна вещь, я хочу сохранить исходный размер PDF, но конверсия увеличивает размер JPG.
Это можно сделать с помощью setResolution
, но вам нужно сделать это перед загрузкой изображения. Попробуйте что-то вроде этого:
// instantiate Imagick $im = new Imagick(); $im->setResolution(300,300); $im->readimage('document.pdf[0]'); $im->setImageFormat('jpeg'); $im->writeImage('thumb.jpg'); $im->clear(); $im->destroy();
Качество изображения, созданного в PDF-формате, можно изменить, установив density
(которая является DPI) перед чтением в PDF-файле – это прошло до ghostscript (gs)
под которым растеризуется PDF. Чтобы получить хороший результат, суперсэмпл с удвоенной плотностью, которую вы требуете, и используйте resample
чтобы вернуться к желаемому DPI. Не забудьте изменить colorspace
на RGB, если вы хотите использовать RGB JPEG.
Типичной версией командной строки для convert
может быть:
convert -density 600 document.pdf[0] -colorspace RGB -resample 300 output.jpg
Если вам нужно обрезать его, команда -shave
следующая за повторной -shave
обычно разумна, если изображение центрировано внутри страницы.
Что касается расширения PHP IMagick , я лично его не использую, поэтому не уверен, как вы указываете подсказки для чтения файлов, но я надеюсь, что это возможно.
$im = new imagick(); //this must be called before reading the image, otherwise has no effect $img->setResolution(200,200); //read the pdf $img->readImage("{$pdf_file}[0]");
Убедитесь, что PDF-файл создан с соответствующими цветовыми профилями, когда-то мой JPG был очень размытым после изменения размера из-за того, что исходный файл был создан с неправильным цветовым профилем. См. Также: ImageMagick PDF to JPEG преобразования результатов в зеленый квадрат, где изображение должно быть
Нажмите здесь для получения более подробной информации. Попробуй это:
HTML
<html> <body> <form action="ConvertPdfToImg.php" enctype="multipart/form-data" method="post" name="f1"> <input id="templateDoc" name="templateDoc" type="file" /> <input type="submit" /> </form> </body> </html>
PHP
$pdfAbsolutePath = __DIR__."/test.pdf"; if (move_uploaded_file($_FILES['templateDoc']["tmp_name"], $pdfAbsolutePath)) { $im = new imagick($pdfAbsolutePath); $noOfPagesInPDF = $im->getNumberImages(); if ($noOfPagesInPDF) { for ($i = 0; $i < $noOfPagesInPDF; $i++) { $url = $pdfAbsolutePath.'['.$i.']'; $image = new Imagick($url); $image->setImageFormat("jpg"); $image->writeImage(__DIR__."/".($i+1).'-'.rand().'.jpg'); } echo "All pages of PDF is converted to images"; } echo "PDF doesn't have any pages"; }