Ich verwende ein kleines Skript, um PDF in JPG zu konvertieren. Das funktioniert aber die Qualität ist sehr schlecht.
Das Skript:
$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();
Noch etwas, ich möchte die Originalgröße von PDF beibehalten, aber die Konvertierung beschneidet die Größe des JPG.
Sie können dies mit setResolution
tun, aber Sie müssen dies tun, bevor Sie ein Bild laden
// 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();
Die Qualität des aus PDF erzeugten Bildes kann geändert werden, indem Sie die Variable density
(dh die DPI) einstellen, bevor Sie in PDF lesen - dies passiert an ghostscript (gs)
, unter der das PDF gerastert wird . Um ein gutes Ergebnis zu erhalten, sollten Sie die doppelte Dichte berechnen, die Sie benötigen, und mit resample
die gewünschte DPI-Zahl wieder herstellen. Denken Sie daran, die Variable colorspace
in RGB zu ändern, wenn Sie ein RGB-JPEG wünschen.
Eine typische Befehlszeilenversion für convert
könnte Folgendes sein:
convert -density 600 document.pdf[0] -colorspace RGB -resample 300 output.jpg
Wenn Sie es beschneiden müssen, ist ein -shave
-Befehl nach dem Resample in der Regel sinnvoll, wenn das Bild innerhalb der Seite zentriert ist.
Was die PHP - IMagick-Erweiterung angeht , ich benutze sie nie persönlich - also bin ich nicht sicher, wie Sie Hinweise zum Lesen von Dateien angeben, aber ich würde hoffen, dass dies möglich ist.
$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]");
Stellen Sie sicher, dass das PDF mit den korrekten Farbprofilen erstellt wurde. Ich hatte einmal die JPG-Datei sehr ausgewaschen, nachdem die Größe geändert wurde, da die Quelldatei ein falsches Farbprofil erstellt hatte. Siehe auch: ImageMagick PDF in JPEG-Konvertierungsergebnisse im grünen Quadrat, wo das Bild sein soll
Klicken Sie auf hier für weitere Details. Versuche dies:
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";
}