Intereting Posts
Возврат 2 дат из единого поля для запроса MYSQL db Функция сортировки массива в PHP Как я могу получить имя файла DirectoryIndex для данного URI с помощью PHP? Ошибка синтаксического анализа строки PHP с необходимой точкой с запятой после переменной PHP GET Request, отправка заголовков Предотвращение загрузки из удаленного источника, если размер файла больше заданного размера Ошибки PHP MongoDB при использовании автоматического переключения при сбое Laravel 5.4 получить Referer Symfony2 Twig неограниченная глубина детства Как остановить навигационную панель вверху страницы при прокрутке вниз Раздражающие правила vim (un) Получение ошибки 324 (net :: ERR_EMPTY_RESPONSE). при использовании memcache в kohana PHP: Catchable fatal error: Объект класса stdClass не может быть преобразован в строку Удалить все обратные косые черты из строки – php – regex Я использую Ajax, но страница все еще освежает, когда я нажимаю кнопку submit

Преобразование PDF в JPEG с помощью PHP и ImageMagick

Я использую сценарий 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"; }