pip install pdf2image
convert_from_path
กับ convert_from_bytes
แต่โดยทั่วไปแล้วใช้แค่ convert_from_path
เป็นหลักconvert_from_path
ใช้เพื่อเปิดไฟล์ pdf ขึ้นมาเป็นลิสต์ของออบเจ็กต์รูปภาพของมอดูล PIL (pillow) ซึ่งสามารถใช้เมธอด .save()
เพื่อทำการบันทึกเป็นไฟล์ภาพชนิดต่างๆได้import pdf2image
lis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf')
lis_img[0].save(r'ภาพจากคัมภีร์คาถาต้องห้าม.png')
lis_img[0].save('xxx.jpg')
convert_from_path
นั้นเป็นลิสต์ซึ่งมีหลายภาพอยู่ข้างใน ถ้าหากต้องการจะเอามาบันทึกเป็นไฟล์ภาพก็อาจวนด้วย for แล้วบันทึกทีละภาพโดยใส่เลขหน้าไว้ข้างหลังชื่อ เช่นimport pdf2image
lis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf')
for i in range(len(lis_img)):
lis_img[i].save(r'ภาพจากคัมภีร์คาถาต้องห้าม_%d.png'%(i+1))
convert_from_bytes
นั้นก็คล้ายกับ convert_from_path
แค่จะไม่ได้อ่าน pdf จากตัวไฟล์ แต่ไปอ่านจากข้อมูลไบต์ภายในตัวไฟล์ ถ้าจะใช้อ่านไฟล์จากภาพก็ต้องเปิดไฟล์ขึ้นมาด้วย open ในโหมด rb ก่อนแล้วอ่านข้อมูลในตัวไฟล์แล้วจึงค่อยใช้ convert_from_bytes
convert_from_bytes
ก็อาจเขียนได้แบบนี้import pdf2image
with open(r'คัมภีร์คาถาต้องห้าม.pdf','rb') as f:
lis_img = pdf2image.convert_from_bytes(f.read())
for i in range(len(lis_img)):
lis_img[i].save(r'ภาพจากคัมภีร์คาถาต้องห้ามx_%d.png'%(i+1))
convert_from_path
โดยไม่ได้กำหนดขนาดความละเอียดของภาพจะได้ภาพที่อาจใหญ่ไปหน่อย แต่หากต้องการทำให้ภาพเล็กลงหรือใหญ่ขึ้นไปอีกก็อาจทำได้โดยใส่คีย์เวิร์ด dpi
ลงไป เช่นlis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',dpi=72)
dpi=
ไปก็ได้ เช่นlis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',72)
size
แล้วใส่ทูเพิลของความกว้างและสูงที่ต้องการลงไปได้เลย เช่นlis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',size=(300,200))
print(lis_img[0].size) # ได้ (300, 200)
lis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',size=(300,None))
print(lis_img[0].size) # ได้ (300, 425)
lis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',size=(None,200))
print(lis_img[0].size) # ได้ (142, 200)
lis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',size=300)
print(lis_img[0].size) # ได้ (300, 300)
first_page
และ last_page
ลงไปlis_img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',first_page=2,last_page=4)
print(len(lis_img)) # ได้ 3
convert_from_path
โดยทั่วไปจะได้ภาพที่ไม่มีความโปร่งใส และฉากหลังเป็นสีขาว แต่ให้ด้านหลังสีขาวนี้กลายเป็นโปร่งใสแทนก็ทำได้โดยใส่คีย์เวิร์ด transparent=True
ลงไป เพียงแต่ว่าจะต้องใส่ fmt='png'
ลงไปด้วย เพื่อให้อ่านขึ้นมาในโหมดภาพ png ซึ่งมีค่าความโปร่งใสอยู่ตั้งแต่แรกfmt
ในที่นี้ปกติไม่ได้จำเป็นต้องใส่ เพราะยังไงตอนที่จะบันทึกเป็นภาพโดยใช้ .save()
ก็กำหนดสกุลของภาพได้ตามที่ต้องการอยูด้วย แต่โดยปกติถ้าไม่ได้ใส่ fmt จะถูกอ่านเป็นชนิด ppm (portable pixmap) ซึ่งไม่ได้รวมค่า alpha (ค่าความไม่ใส) อยู่ด้วยimg = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',fmt='png')[0]
print(img.mode) # ได้ RGB
img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',fmt='png',transparent=True)[0]
print(img.mode) # ได้ RGBA
img = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',transparent=True)[0]
print(img.mode) # ได้ RGB
transparent=True
แต่ถ้าไม่ได้ใส่ fmt='png'
ไปด้วยก็จะได้ผลไม่ต่างจากไม่ใส่ คือได้โหมด RGB ซึ่งเป็นภาพสีธรรมดาไม่มี A (คือค่า alpha) รวมอยู่grayscale=True
ลงไป เท่านี้ก็กลายเป็นภาพขาวดำแล้วimg = pdf2image.convert_from_path(r'คัมภีร์คาถาต้องห้าม.pdf',grayscale=True)[0]
print(img.mode) # ได้ L
import pdf2image
pdf_file = r'เอกสาร.pdf' # ชื่อไฟล์ pdf ที่จะแปลง
img_file = r'ภาพ.tif' # ชื่อไฟล์ tiff ที่ต้องการ
lis_img = pdf2image.convert_from_path(pdf_file,dpi=72)
lis_img[0].save(img_file,compression='tiff_deflate',save_all=True,append_images=lis_img[1:])
.save()
ของตัวออบเจ็กต์ภาพของ PIL ดังนั้นจะขอละการอธิบายในรายละเอียดimport docx2pdf
import pdf2image
import os
word_file = r'คัมภีร์คาถาต้องห้าม.docx' # ชื่อไฟล์เวิร์ดที่ต้องการแปลง
img_path = r'ภาพจากคัมภีร์คาถาต้องห้าม' # ชื่อโฟลเดอร์ที่จะวางไฟล์ภาพที่ได้
dpi = 72 # ค่าความละเอียดของภาพ
# ก่อนอื่นแปลงเป็น pdf ก่อน
pdf_file = word_file+'.pdf' # ชื่อไฟล์ pdf ที่จะสร้างขึ้นมาชั่วคราว แต่เดี๋ยวก็จะลบอยู่แล้วที่จริงจะตั้งยังไงก็ได้
docx2pdf.convert(word_file,pdf_file)
# ถ้าโฟลเดอร์ที่จะวางรูปนั้นยังไม่มีอยู่ก็สร้างขึ้นมาก่อน
if(not os.path.exists(img_path)):
os.mkdir(img_path)
# ทำการแปลงจาก pdf เป็นภาพ
lis_img = pdf2image.convert_from_path(pdf_file,dpi)
for i,img in enumerate(lis_img,1):
img.save(os.path.join(img_path,str(i)+'.png'))
os.remove(pdf_file) # ไฟล์ pdf ใช้เสร็จแล้วก็ลงทิ้งได้
word_file = r'คัมภีร์คาถาต้องห้าม.docx' # ชื่อไฟล์เวิร์ดที่ต้องการแปลง
img_file = r'ภาพจากคัมภีร์คาถาต้องห้าม.png' # ไฟล์ภาพที่ต้องการสร้าง
dpi = 72 # ค่าความละเอียดของภาพ
pdf_file = word_file+'.pdf'
docx2pdf.convert(word_file,pdf_file)
pdf2image.convert_from_path(pdf_file,dpi)[0].save(img_file)
os.remove(pdf_file)
convert_from_path
ซึ่งได้กล่าวถึงมาในข้างต้นไว้ตรงนี้dpi | ความละเอียดของภาพที่อ่านได้ |
size | ขนาดของภาพที่อ่านได้ |
first_page | หน้าแรกที่จะอ่าน |
last_page | หน้าสุดท้ายที่จะอ่าน |
fmt | ฟอร์แม็ตของภาพที่อ่านได้ |
transparent | ถ้าใส่ True จะได้ภาพที่ฉากหลังโปร่งใส |
grayscale | ถ้าใส่ True จะได้ภาพขาวดำ |
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ