422 Stimmen

PDF in Bilder mit hoher Auflösung konvertieren

Ich versuche, das Kommandozeilenprogramm zu verwenden convert um ein PDF in ein Bild (JPEG oder PNG) umzuwandeln. Hier ist eine der PDFs die ich zu konvertieren versuche.

Ich möchte, dass das Programm den überschüssigen weißen Raum abschneidet und ein Bild mit ausreichender Qualität liefert, damit die hochgestellten Buchstaben problemlos gelesen werden können.

Dies ist meine aktuelle bester Versuch . Wie Sie sehen können, funktioniert das Beschneiden gut, ich muss nur die Auflösung ein wenig schärfen. Dies ist der Befehl, den ich verwende:

convert -trim 24.pdf -resize 500% -quality 100 -sharpen 0x1.0 24-11.jpg

Ich habe versucht, die folgenden Entscheidungen bewusst zu treffen:

  • Vergrößern (hat keinen Einfluss auf die Auflösung)
  • die Qualität so hoch wie möglich zu halten
  • verwenden Sie die -sharpen (Ich habe eine Reihe von Werten ausprobiert)

Für Vorschläge, wie die Auflösung des Bildes im endgültigen PNG/JPEG-Format erhöht werden kann, wäre ich sehr dankbar!

2voto

Armin Mustafa Punkte 652

Ein weiterer Vorschlag ist, dass Sie GIMP verwenden können.

Laden Sie einfach die PDF-Datei in GIMP->Speichern als .xcf und dann können Sie mit dem Bild machen, was Sie wollen.

1voto

Ich habe verwendet pdf2image . Eine einfache Python-Bibliothek, die wie ein Charme funktioniert.

Erste Installation poppler auf einem Nicht-Linux-Rechner. Sie können die Zip-Datei einfach herunterladen. Entpacken Sie es in Programme und fügen Sie bin zum Maschinenpfad hinzu.

Danach können Sie pdf2image in einer Python-Klasse wie dieser verwenden:

from pdf2image import convert_from_path, convert_from_bytes
images_from_path = convert_from_path(
   inputfile,
   output_folder=outputpath,
   grayscale=True, fmt='jpeg')

Ich kenne mich mit Python nicht gut aus, konnte aber Exe daraus machen. Später können Sie die Exe mit Datei-Input und Output-Parameter verwenden. Ich habe es in C# verwendet und die Dinge funktionieren gut.

Die Bildqualität ist gut. OCR funktioniert gut.

0voto

K J Punkte 2752

Viele Antworten hier konzentrieren sich auf die Verwendung von Magick (oder dessen Abhängigkeit GhostScript) gemäß der Frage des Auftraggebers, wobei einige wenige Gimp als Alternative vorschlagen, ohne zu beschreiben, warum bestimmte Einstellungen für verschiedene Fälle am besten geeignet sind.

In Anlehnung an das OP-"Beispiel" ist die Anforderung ein scharfes, beschnittenes Bild, das so klein wie möglich ist und dennoch gut lesbar bleibt. und hier das Ergebnis ist 96 dpi in 58 KB (eine sehr geringe Steigerung gegenüber der Vektorquelle 54 KB) Vergleichen Sie das mit den 72 dpi (226 KB) im obigen akzeptierten Antwortbild.

enter image description here

IrfanView (mit oder ohne GS) ist so eingestellt, dass es die PDF-Seite(n) automatisch zuschneidet und mit einer Standardeinstellung von 96 dpi als PNG ausgibt, wobei nur 4 Bit pro Pixel für 16 Graustufen verwendet werden.
Die Größe könnte noch weiter reduziert werden, indem die Auflösung verringert wird.

0voto

Dorian Punkte 4209
convert -density 300 * airbnb.pdf

Sah für mich perfekt aus

0voto

LF00 Punkte 24295

Ich benutze icepdf eine Open-Source-Java-PDF-Engine. Prüfen Sie die Büro-Demo .

package image2pdf;

import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

public class pdf2image {

   public static void main(String[] args) {

      Document document = new Document();
      try {
         document.setFile("C:\\Users\\Dell\\Desktop\\test.pdf");
      } catch (PDFException ex) {
         System.out.println("Error parsing PDF document " + ex);
      } catch (PDFSecurityException ex) {
         System.out.println("Error encryption not supported " + ex);
      } catch (FileNotFoundException ex) {
         System.out.println("Error file not found " + ex);
      } catch (IOException ex) {
         System.out.println("Error IOException " + ex);
      }

      // save page captures to file.
      float scale = 1.0f;
      float rotation = 0f;

      // Paint each pages content to an image and
      // write the image to file
      for (int i = 0; i < document.getNumberOfPages(); i++) {
         try {
         BufferedImage image = (BufferedImage) document.getPageImage(
             i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_CROPBOX, rotation, scale);

         RenderedImage rendImage = image;
         try {
            System.out.println(" capturing page " + i);
            File file = new File("C:\\Users\\Dell\\Desktop\\test_imageCapture1_" + i + ".png");
            ImageIO.write(rendImage, "png", file);
         } catch (IOException e) {
            e.printStackTrace();
         }
         image.flush();
         }catch(Exception e){
             e.printStackTrace();
         }
      }

      // clean up resources
      document.dispose();
   }
}

Ich habe auch versucht imagemagick y pdftoppm Sowohl pdftoppm als auch icepdf haben eine höhere Auflösung als imagemagick.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X