Преобразование PDF в JPEG с помощью PHP и ImageMagick
Я использую litte script для преобразования PDF в JPG. Это работает, но качество очень плохое.
script:
$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.
Ответы
Ответ 1
Это можно сделать с помощью 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();
Ответ 2
Качество изображения, созданного в 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
, следующая за повторной выборкой, обычно разумна, если изображение сосредоточено внутри страницы.
Что касается расширения PHP IMagick, ну, я никогда лично его не использую, поэтому не уверен, как вы указываете подсказки для чтения файла, но я надеюсь, что это возможно.
Ответ 3
$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]");
Ответ 4
Убедитесь, что PDF файл создан с соответствующими цветовыми профилями, когда-то мой JPG был очень размытым после изменения размера из-за того, что исходный файл был создан с неправильным цветовым профилем. Смотрите также: ImageMagick Преобразование PDF в JPEG в зеленом квадрате, где изображение должно быть
Ответ 5
Нажмите здесь для получения более подробной информации. Попробуйте следующее:
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";
}