แปลง PDF เป็นภาพด้วยความละเอียดสูง


328

ฉันกำลังพยายามใช้โปรแกรมบรรทัดคำสั่งconvertเพื่อแปลง PDF เป็นรูปภาพ (JPEG หรือ PNG) นี่คือหนึ่งใน PDFที่ฉันพยายามแปลง

ฉันต้องการให้โปรแกรมตัดส่วนเกินของพื้นที่สีขาวออกและให้ภาพที่มีคุณภาพสูงพอที่จะอ่านตัวยกได้อย่างง่ายดาย

นี่คือปัจจุบันของฉันพยายามที่ดีที่สุด อย่างที่คุณเห็นการตัดแต่งใช้งานได้ดีฉันต้องเพิ่มความคมชัดให้สูงขึ้นเล็กน้อย นี่คือคำสั่งที่ฉันใช้:

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

ฉันพยายามตัดสินใจอย่างมีสติต่อไปนี้:

  • ปรับขนาดให้ใหญ่ขึ้น (ไม่มีผลต่อความละเอียด)
  • ทำให้คุณภาพสูงที่สุด
  • ใช้-sharpen(ฉันได้ลองค่าหลายช่วงแล้ว)

ข้อเสนอแนะใด ๆ โปรดรับความละเอียดของภาพใน PNG / JPEG สุดท้ายที่สูงขึ้นจะได้รับการชื่นชมอย่างมาก!


ฉันไม่รู้คุณสามารถลองลิงค์ได้ ...
karnok

1
ดูเพิ่มเติม: askubuntu.com/a/50180/64957
Dave Jarvis

หากคุณใช้ mac ลองดูที่man pageสำหรับsips"ระบบประมวลผลภาพสคริปต์" มันเป็นโปรแกรมแก้ไขรูปภาพบรรทัดคำสั่งในตัวสำหรับ macOS ทำงานกับ PDF และรูปภาพประเภทอื่น ๆ อีกมากมาย
ghoti

@ghoti sips จะแปลงหน้าแรกของไฟล์ PDF เป็นภาพเท่านั้น
benwiggy

คำตอบ:


386

ดูเหมือนว่างานดังต่อไปนี้:

convert           \
   -verbose       \
   -density 150   \
   -trim          \
    test.pdf      \
   -quality 100   \
   -flatten       \
   -sharpen 0x1.0 \
    24-18.jpg

มันจะส่งผลในภาพด้านซ้าย เปรียบเทียบสิ่งนี้กับผลลัพธ์ของคำสั่งดั้งเดิมของฉัน ( ภาพด้านขวา ):

  

(หากต้องการจริงๆเห็นและชื่นชมความแตกต่างระหว่างสองคลิกขวาในแต่ละและเลือก"ภาพที่เปิดในแท็บใหม่ ..." .)

โปรดจำข้อเท็จจริงต่อไปนี้ไว้ด้วย:

  • ภาพที่เบลอทางด้านขวายิ่งแย่ลงมีขนาดไฟล์ 1.941.702 ไบต์ (1.85 MByte) ความละเอียดของมันคือ 3060x3960 พิกเซลโดยใช้พื้นที่สี RGB แบบ 16 บิต
  • ภาพที่คมชัดกว่าด้านซ้ายจะมีขนาดไฟล์ 337.879 ไบต์ (330 kByte) ความละเอียดของมันคือ 758x996 พิกเซลโดยใช้พื้นที่สีเทา 8 บิต

ดังนั้นไม่จำเป็นต้องปรับขนาด เพิ่ม-densityธง ค่าความหนาแน่น 150 นั้นแปลก - การลองช่วงของค่าต่าง ๆ จะทำให้ภาพดูแย่ลงในทั้งสองทิศทาง!


77
densityพารามิเตอร์เป็นบิตพิเศษในการในการที่จะต้องมาก่อนแฟ้มใส่ PDF เป็นรูปแบบไฟล์แบบเวกเตอร์ซึ่งไม่มีความคิด (มาก) ของพิกเซลจึงกล่าวว่า "หน้า 8in 12in" หากคุณต้องการพิกเซลคุณใช้การdensityตั้งค่าเพื่อบอกจำนวนพิกเซลต่อนิ้วที่คุณต้องการรับในเอาต์พุต เช่น. ด้วย 150 คุณจะได้รับ 8x150 = 1200 คูณ 12x150 = 1800 พิกเซลในภาพผลลัพธ์ นั่นคือจำนวนพิกเซลที่การตั้งค่าความคมชัดความคมชัดการบีบอัด ฯลฯ
Daniel Schneller

8
มันอาจส่งผลให้พื้นหลังสีดำบน Mac OS (ดูstackoverflow.com/questions/10934456/… ) -flattenในการแก้ไขปัญหานี้เพิ่ม
Rolf

2
ฉันมีพื้นหลังสีดำบน Mac OS เมื่อฉันพยายามแปลงไฟล์ PDF เป็น png โดยเพิ่ม -flatten ให้แก้ไข
olala

4
ว้าว! เพิ่งใช้-densityและ-flattenตัวเลือกเพื่อลดขนาดของ pdf (เป็น pdf อื่น) -flattenตัวเลือกจริงๆช่วยมากในการลดขนาดรวม ในกรณีของฉันไม่มีการรบกวนทางสายตา
parvus

2
-densityธงมีแนวโน้มที่จะให้ผลลัพธ์ที่เลวร้ายยิ่งค่าสูงขึ้นหากคุณภาพของภาพเริ่มต้นต่ำกว่า
parvus

152

ส่วนตัวฉันชอบสิ่งนี้

convert -density 300 -trim test.pdf -quality 100 test.jpg

มันเล็กกว่าสองเท่าของขนาดไฟล์ แต่มันก็ดูดีกว่าสำหรับฉัน

-density 300 ตั้งค่า dpi ที่ PDF แสดงผลที่

-trim ลบพิกเซลขอบใด ๆ ที่มีสีเดียวกับพิกเซลมุม

-quality 100 ตั้งค่าคุณภาพการบีบอัด JPEG ให้มีคุณภาพสูงสุด

สิ่งต่าง ๆ เช่น-sharpenทำงานได้ไม่ดีกับข้อความเพราะพวกเขาเลิกทำสิ่งที่ระบบการแสดงผลแบบอักษรของคุณทำให้ชัดเจนขึ้น

หากคุณต้องการให้มันใช้งานจริงปรับขนาดที่นี่และอาจมีค่า dpi ที่มากขึ้นของบางอย่างเช่นtargetDPI * scalingFactor นั่นจะแสดง PDF ที่ความละเอียด / ขนาดที่คุณต้องการ

คำอธิบายของพารามิเตอร์ใน imagemagick.org อยู่ที่นี่


ขนาดใหญ่เป็นสองเท่าเนื่องจากความหนาแน่นของเอาต์พุตเพิ่มขึ้นเป็นสองเท่าและคุณภาพการบีบอัด jpg ถูกตั้งค่าไว้ที่ max (ดังนั้นจึงไม่มีการบีบอัดมากนัก)
rivimey

โดยใช้convertวิธีการที่เราจะรู้วิธีการหลาย ๆ หน้าได้แปลง?
Kiran Reddy

เอ่อนี่เป็นวิธีที่จะไปแน่นอน -sharpenชนขึ้นความหนาแน่นของแหล่งที่มาและลบ -sharpenที่มีคุณภาพมากยิ่งดีกว่ากับค่าเริ่มต้นและวิธีที่เป็นธรรมชาติมากขึ้นกว่าด้วย
Joshua Pinter

19

ฉันใช้pdftoppmในบรรทัดคำสั่งเพื่อรับภาพเริ่มต้นโดยทั่วไปมีความละเอียด 300dpi ดังนั้นpdftoppm -r 300จากนั้นใช้convertในการทำการตัดและแปลง PNG


1
ในขณะที่ไม่ได้ใช้ Imagemagick โซลูชันนี้ดูเหมือนจะอยู่ในจิตวิญญาณของการเปลี่ยนใจเลื่อมใส pdftoppmยังสามารถส่งออก JPEG และ PNG
แอรอนบริค

19

ปกติฉันจะแยกภาพที่ฝังอยู่ด้วย 'pdfimages' ที่ความละเอียดดั้งเดิมจากนั้นใช้ ImageMagick's conversion เป็นรูปแบบที่ต้องการ:

$ pdfimages -list fileName.pdf
$ pdfimages fileName.pdf fileName   # save in .ppm format
$ convert fileName-000.ppm fileName-000.png

สิ่งนี้จะสร้างไฟล์ผลลัพธ์ที่ดีที่สุดและเล็กที่สุด

หมายเหตุ: สำหรับรูปภาพที่ฝัง JPG แบบสูญหายคุณต้องใช้ -j:

$ pdfimages -j fileName.pdf fileName   # save in .jpg format

ด้วย poppler ที่ผ่านมาคุณสามารถใช้ -all ที่บันทึก lossy เป็น jpg และ lossless as png

บนแพลตฟอร์ม Win ที่ให้มาเล็กน้อยคุณต้องดาวน์โหลดไบนารี 'poppler-util' ไบนารีล่าสุด (0.37 2015) จาก: http://blog.alivate.com.au/poppler-windows/


เพียงแค่การแก้ไขเล็กน้อย: คำสั่งที่สองในบล็อกรหัสแรกควรเริ่มต้นด้วยpdftoppm ไม่ใช่pdfimages
satyanarayan rao

ไม่ pdfimages แบบเก่าจะบันทึกรูปภาพที่แยกไปยัง ppm เช่น pdftoppm และ pdftoppm ไม่เคยมีตัวเลือก -list pdfimages ปัจจุบันสามารถบันทึกโดยตรงกับ PNG และ JPG ด้วย - ทั้งหมดตามที่ระบุไว้ในหมายเหตุ
Valerio

13

ฉันพบว่าทั้งเร็วขึ้นและมีเสถียรภาพมากขึ้นเมื่อทำการประมวลผล PDF ขนาดใหญ่เป็น PNG และ JPG เพื่อใช้gsคำสั่งต้นแบบ(aka Ghostscript) ที่convertใช้

คุณสามารถดูคำสั่งในการส่งออกของconvert -verboseและมีการปรับแต่งอีกไม่กี่ที่เป็นไปได้มี (YMMV) ที่มีความยาก / convertไม่สามารถที่จะเข้าถึงได้โดยตรงผ่านทาง

อย่างไรก็ตามมันยากกว่าที่จะทำการตัดแต่งและลับคมของคุณโดยใช้gsดังนั้นอย่างที่ฉันพูด YMMV!


10

นอกจากนี้ยังให้ผลลัพธ์ที่ดี:

exec("convert -geometry 1600x1600 -density 200x200 -quality 100 test.pdf test_image.jpg");

7

ผู้ใช้ Linux ที่นี่: ฉันลองconvertใช้อรรถประโยชน์บรรทัดคำสั่ง (สำหรับ PDF เป็น PNG) และฉันไม่พอใจกับผลลัพธ์ ฉันพบสิ่งนี้จะง่ายขึ้นด้วยผลลัพธ์ที่ดีกว่า:

  • แยกหน้า pdf ด้วย pdftk
    • เช่น: pdftk file.pdf cat 3 output page3.pdf
  • เปิด (นำเข้า) PDF ที่มี GIMP
    • สำคัญ: เปลี่ยนการนำเข้าResolutionจาก100เป็น300หรือ600 pixel/in
  • กำลังGIMPส่งออกเป็น PNG (เปลี่ยนนามสกุลไฟล์เป็น. png)

แก้ไข:

เพิ่มภาพ, Commentsตามที่ร้องขอใน แปลงคำสั่งที่ใช้:

convert -density 300 -trim struct2vec.pdf -quality 100 struct2vec.png

GIMP: นำเข้าที่ 300 dpi (px / in); ส่งออกเป็น PNG ระดับการบีบอัด 3

ฉันไม่ได้ใช้ GIMP ในบรรทัดคำสั่ง (อีก: ความคิดเห็นของฉันด้านล่าง)

pdf2png

ป้อนคำอธิบายรูปภาพที่นี่


1
สิ่งนี้จะเป็นอัตโนมัติหรือไม่ถ้าคุณมีหลายพันหน้า?
JBWhitmore

@JBWhitmore: เป็นคำถามที่ดี แน่นอนว่ามันจะง่ายต่อการสคริปต์คำสั่ง pdftk เนื่องจากมันมีอยู่แล้วในบรรทัดคำสั่ง ฉันค้นหาด้วย Google อย่างรวดเร็วและพบว่า GIMP มีโหมดแบตช์ (ฉันไม่ได้ลอง แต่ดูเหมือนว่าควรเป็นสคริปต์ได้เช่นกัน): gimp.org/tutorials/Basic_Batch
Victoria Stuart

1
@JB ขอให้มีสคริปต์ตัวอย่างเพื่อทำการแปลงนี้โดยอัตโนมัติในคำถาม / คำตอบนี้: unix.stackexchange.com/questions/121293/…
tsherwen

1
@ tsherwen ถ้าฉันอ่านลิงค์นั้นถูกต้องมันเป็นวิธีการแปลงคำสั่งให้เป็นอัตโนมัติ ฉันไม่สับสนกับวิธีการทำเช่นนั้น อย่างไรก็ตามคำตอบนี้บอกว่าจะใช้ GIMP เป็นหนึ่งในขั้นตอน - และทั้งคำตอบและการเชื่อมโยงนี้ไม่ปรากฏขึ้นเพื่อแสดงวิธีการทำเช่นนั้นโดยอัตโนมัติ
JBWhitmore

1
@JBWhitmore convertฉันเป็นเพียงการเข้าใจผิดคิดในแง่ของคำถามเกี่ยวกับ ฉันเห็นเพียงบางส่วนของคำตอบที่กล่าวถึงconvertและคำถามของคุณขณะที่อ่านความคิดเห็นอัตโนมัติของคุณ ขอขอบคุณสำหรับคำตอบของคุณในภายหลังในกระทู้นี้ซึ่งฉันรวมกับโซลูชันที่ฉันเชื่อมโยงและแก้ไขปัญหาอื่นที่ฉันมี
tsherwen

7

ผมไม่ได้มีความสำเร็จที่ดีกับconvert[อัพเดตพฤษภาคม 2020: จริง: มันสวยมากไม่เคยทำงานให้ฉัน] pdftoppmแต่ผมเคยประสบความสำเร็จที่ยอดเยี่ยมด้วย นี่คือตัวอย่างของการสร้างภาพที่มีคุณภาพสูงจาก PDF:

  1. [สร้างไฟล์ขนาด25-25 MB ต่อ pg] รูปแบบไฟล์. tif ที่ไม่บีบอัดที่300 DPIไปยังโฟลเดอร์ที่เรียกว่า "images" โดยมีไฟล์ชื่อpg-1.tif , pg-2.tif , pg-3.tif , ฯลฯ :

    mkdir -p images && pdftoppm -tiff -r 300 mypdf.pdf images/pg
    
  2. [ผลิตไฟล์ขนาด 1MB ต่อ pg] เอาต์พุตในรูปแบบ. jpgที่300 DPI :

    mkdir -p images && pdftoppm -jpeg -r 300 mypdf.pdf images/pg
    
  3. [ผลิตไฟล์ขนาด 2MB ต่อ pg] เอาต์พุตในรูปแบบ. jpg ที่คุณภาพสูงสุด (บีบอัดน้อยที่สุด)และยังคงอยู่ที่300 DPI :

    mkdir -p images && pdftoppm -jpeg -jpegopt quality=100 -r 300 mypdf.pdf images/pg
    

สำหรับคำอธิบายเพิ่มเติมตัวเลือกและตัวอย่างเพิ่มเติมดูคำตอบแบบเต็มของฉันที่นี่:

/ubuntu/150100/extracting-embedded-images-from-a-pdf/1187844#1187844

ที่เกี่ยวข้อง:

  1. [วิธีเปลี่ยน PDF เป็น PDF ที่ค้นหาได้pdf2searchablepdf] /ubuntu/473843/how-to-turn-a-pdf-into-a-text-searchable-pdf/1187881#1187881
  2. cross-linked:
    1. จะแปลง PDF เป็น JPG ด้วย commandline in linux ได้อย่างไร?
    2. /unix/11835/pdf-to-jpg-without-quality-loss-gscan2pdf/585574#585574

6

ใน ImageMagick คุณสามารถทำ "supersampling" คุณระบุความหนาแน่นขนาดใหญ่และปรับขนาดลงตามที่ต้องการสำหรับขนาดผลลัพธ์สุดท้าย ตัวอย่างเช่นกับภาพของคุณ:

convert -density 600 test.pdf -background white -flatten -resize 25% test.png


ป้อนคำอธิบายรูปภาพที่นี่

ดาวน์โหลดภาพเพื่อดูความละเอียดเต็มเพื่อเปรียบเทียบ ..

ฉันไม่แนะนำให้บันทึกเป็น JPG หากคุณคาดว่าจะดำเนินการต่อไป

หากคุณต้องการให้เอาต์พุตมีขนาดเท่ากับอินพุตให้ปรับขนาดเป็นอัตราส่วนผกผันของความหนาแน่นของคุณเป็น 72 เช่น -density 288 และ -resize 25% 288 = 4 * 72 และ 25% = 1/4

ความหนาแน่นที่มากขึ้นจะทำให้ได้ผลลัพธ์ที่มีคุณภาพดีกว่า แต่จะใช้เวลาในการประมวลผลนานกว่า


3

ข้อเสนอแนะอีกอย่างหนึ่งคือคุณสามารถใช้ GIMP ได้

เพียงโหลดไฟล์ PDF ใน GIMP-> บันทึกเป็น. xcf จากนั้นคุณสามารถทำสิ่งที่คุณต้องการกับภาพ


9
เหตุผลในการทำสิ่งนี้ผ่านทางบรรทัดคำสั่งคือฉันมีหน้านับพันที่ต้องการกระบวนการนี้
JBWhitmore

นอกจากนี้ GIMP ยังแสดงผลหน้าเว็บขณะโหลดดังนั้นคุณจะต้องตั้งค่าความละเอียดเมื่อคุณเลือกหน้าที่จะโหลด ไม่สำคัญว่าคุณจะตั้งค่าพารามิเตอร์เอาต์พุตเป็นอย่างไรถ้าคุณเริ่มต้นด้วยการโหลดเริ่มต้น 100 DPI
Keith Davies

1

ฉันใช้icepdfโปรแกรมจาวาแบบ pdf ตรวจสอบการสาธิตสำนักงาน

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();
   }
}

ฉันยังลองimagemagickและpdftoppmทั้ง pdftoppm และ icepdf มีความละเอียดสูงกว่า imagemagick


1

โปรดทราบก่อนลงคะแนนโซลูชันนี้สำหรับ Gimp โดยใช้ส่วนต่อประสานกราฟิกและไม่ใช่ ImageMagick โดยใช้บรรทัดคำสั่ง แต่ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันเป็นทางเลือกและนั่นคือเหตุผลที่ฉันพบว่าจำเป็นต้องแบ่งปันที่นี่

ทำตามขั้นตอนง่าย ๆ เหล่านี้เพื่อแยกรูปภาพในรูปแบบใด ๆ จากเอกสาร PDF

  1. ดาวน์โหลดโปรแกรมจัดการรูปภาพของ GIMP
  2. เปิดโปรแกรมหลังจากการติดตั้ง
  3. เปิดเอกสาร PDF ที่คุณต้องการแยกรูปภาพ
  4. เลือกหน้าของเอกสาร PDF ที่คุณต้องการดึงภาพออกมาเท่านั้น N / B: หากคุณต้องการเฉพาะภาพหน้าปกให้เลือกเฉพาะหน้าแรก
  5. คลิกเปิดหลังจากเลือกหน้าเว็บที่คุณต้องการดึงภาพออกมา
  6. คลิกที่เมนูไฟล์เมื่อ GIMP เมื่อเปิดหน้า
  7. เลือกส่งออกเช่นเดียวกับในเมนูไฟล์
  8. เลือกประเภทไฟล์ที่คุณต้องการตามส่วนขยาย (เช่น png) ด้านล่างกล่องโต้ตอบที่ปรากฏขึ้น
  9. คลิกที่ส่งออกเพื่อส่งออกภาพของคุณไปยังตำแหน่งที่คุณต้องการ
  10. จากนั้นคุณสามารถตรวจสอบไฟล์ explorer ของคุณเพื่อดูภาพที่ส่งออก

นั่นคือทั้งหมดที่

ฉันหวังว่านี่จะช่วยได้


คำถามสำหรับ ImageMagick ใช้บรรทัดคำสั่งไม่ใช่สำหรับ Gimp โดยใช้ส่วนต่อประสานกราฟิก
ซิดนีย์

0

ไฟล์ PNG ที่คุณแนบมาดูเบลอจริงๆ ในกรณีที่คุณต้องการใช้การประมวลผลเพิ่มเติมสำหรับแต่ละภาพที่คุณสร้างเป็นตัวอย่าง PDF คุณจะลดประสิทธิภาพของโซลูชัน

2JPEGสามารถแปลงไฟล์ PDF ที่คุณแนบไปกับ JPG ที่คมชัดและตัดขอบว่างในการโทรครั้งเดียว:

2jpeg.exe -src "C:\In\*.*" -dst "C:\Out" -oper Crop method:autocrop

ความพร่ามัวใน PNG ดั้งเดิมคือสิ่งที่เป็นแรงบันดาลใจให้กับคำถามตั้งแต่แรกและ PNG ในคำตอบที่ยอมรับนั้นค่อนข้างกรอบ
JBWhitmore


0

สคริปต์ python ต่อไปนี้จะทำงานบน Mac ใดก็ได้ (Snow Leopard ขึ้นไป) สามารถใช้บนบรรทัดคำสั่งที่มีไฟล์ PDF ต่อเนื่องเป็นอาร์กิวเมนต์หรือคุณสามารถใส่ลงในการดำเนินการ Run Shell Script ใน Automator และสร้างบริการ (Quick Action in Mojave)

คุณสามารถกำหนดความละเอียดของภาพที่ส่งออกในสคริปต์

สคริปต์และดำเนินการอย่างรวดเร็วสามารถดาวน์โหลดได้จาก GitHub

#!/usr/bin/python
# coding: utf-8

import os, sys
import Quartz as Quartz
from LaunchServices import (kUTTypeJPEG, kUTTypeTIFF, kUTTypePNG, kCFAllocatorDefault) 

resolution = 300.0 #dpi
scale = resolution/72.0

cs = Quartz.CGColorSpaceCreateWithName(Quartz.kCGColorSpaceSRGB)
whiteColor = Quartz.CGColorCreate(cs, (1, 1, 1, 1))
# Options: kCGImageAlphaNoneSkipLast (no trans), kCGImageAlphaPremultipliedLast 
transparency = Quartz.kCGImageAlphaNoneSkipLast

#Save image to file
def writeImage (image, url, type, options):
    destination = Quartz.CGImageDestinationCreateWithURL(url, type, 1, None)
    Quartz.CGImageDestinationAddImage(destination, image, options)
    Quartz.CGImageDestinationFinalize(destination)
    return

def getFilename(filepath):
    i=0
    newName = filepath
    while os.path.exists(newName):
        i += 1
        newName = filepath + " %02d"%i
    return newName

if __name__ == '__main__':

    for filename in sys.argv[1:]:
        pdf = Quartz.CGPDFDocumentCreateWithProvider(Quartz.CGDataProviderCreateWithFilename(filename))
        numPages = Quartz.CGPDFDocumentGetNumberOfPages(pdf)
        shortName = os.path.splitext(filename)[0]
        prefix = os.path.splitext(os.path.basename(filename))[0]
        folderName = getFilename(shortName)
        try:
            os.mkdir(folderName)
        except:
            print "Can't create directory '%s'"%(folderName)
            sys.exit()

        # For each page, create a file
        for i in range (1, numPages+1):
            page = Quartz.CGPDFDocumentGetPage(pdf, i)
            if page:
        #Get mediabox
                mediaBox = Quartz.CGPDFPageGetBoxRect(page, Quartz.kCGPDFMediaBox)
                x = Quartz.CGRectGetWidth(mediaBox)
                y = Quartz.CGRectGetHeight(mediaBox)
                x *= scale
                y *= scale
                r = Quartz.CGRectMake(0,0,x, y)
        # Create a Bitmap Context, draw a white background and add the PDF
                writeContext = Quartz.CGBitmapContextCreate(None, int(x), int(y), 8, 0, cs, transparency)
                Quartz.CGContextSaveGState (writeContext)
                Quartz.CGContextScaleCTM(writeContext, scale,scale)
                Quartz.CGContextSetFillColorWithColor(writeContext, whiteColor)
                Quartz.CGContextFillRect(writeContext, r)
                Quartz.CGContextDrawPDFPage(writeContext, page)
                Quartz.CGContextRestoreGState(writeContext)
        # Convert to an "Image"
                image = Quartz.CGBitmapContextCreateImage(writeContext) 
        # Create unique filename per page
                outFile = folderName +"/" + prefix + " %03d.png"%i
                url = Quartz.CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, outFile, len(outFile), False)
        # kUTTypeJPEG, kUTTypeTIFF, kUTTypePNG
                type = kUTTypePNG
        # See the full range of image properties on Apple's developer pages.
                options = {
                    Quartz.kCGImagePropertyDPIHeight: resolution,
                    Quartz.kCGImagePropertyDPIWidth: resolution
                    }
                writeImage (image, url, type, options)
                del page

0

คุณสามารถทำได้ในLibreOffice Draw (ซึ่งปกติจะติดตั้งไว้ในUbuntu ):

  1. เปิดไฟล์ PDF ใน LibreOffice Draw
  2. เลื่อนไปที่หน้าที่คุณต้องการ
  3. ตรวจสอบให้แน่ใจว่าวางองค์ประกอบข้อความ / รูปภาพอย่างถูกต้อง หากไม่มีคุณสามารถปรับ / แก้ไขได้ในหน้า
  4. เมนูด้านบน: ไฟล์> ส่งออก ...
  5. เลือกรูปแบบภาพที่คุณต้องการในเมนูด้านล่างขวา ฉันแนะนำ PNG
  6. ตั้งชื่อไฟล์ของคุณแล้วคลิกบันทึก
  7. หน้าต่างตัวเลือกจะปรากฏขึ้นเพื่อให้คุณสามารถปรับความละเอียดและขนาด
  8. คลิกตกลงและเสร็จสิ้น

0

ฉันได้ใช้pdf2image คลังหลามอย่างง่ายที่ใช้งานได้ดี

เริ่มติดตั้งpopplerบนเครื่องที่ไม่ใช่ linux คุณสามารถดาวน์โหลด zip ได้ เปิดเครื่องรูดในไฟล์โปรแกรมและเพิ่ม bin ลงใน Machine Path

หลังจากนั้นคุณสามารถใช้ pdf2image ใน python class เช่นนี้:

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

ฉันไม่ดีกับงูหลาม แต่ก็สามารถสร้างมันได้ หลังจากนั้นคุณสามารถใช้ exe พร้อมกับอินพุตไฟล์และพารามิเตอร์เอาต์พุต ฉันใช้มันใน C # และทุกอย่างทำงานได้ดี

คุณภาพของภาพที่ดี OCR ทำงานได้ดี


-1

ที่จริงแล้วมันค่อนข้างง่ายที่จะทำด้วย Preview บนเครื่อง mac สิ่งที่คุณต้องทำคือเปิดไฟล์ในตัวอย่างและบันทึกเป็น (หรือส่งออก) png หรือ jpeg แต่ให้แน่ใจว่าคุณใช้อย่างน้อย 300 dpi ที่ด้านล่างของหน้าต่างเพื่อให้ได้ภาพที่มีคุณภาพสูง


6
สิ่งนี้จะเป็นอัตโนมัติหรือไม่ถ้าคุณมีหลายพันหน้า?
JBWhitmore
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.