Varia library working group XPPL. https://gitea.xpub.nl/XPUB/XPPL
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.6 KiB

import io
6 years ago
import PyPDF2
from wand.color import Color
from wand.image import Image
6 years ago
def pdf_page_to_png(src_pdf, pagenum=0, resolution=72):
6 years ago
"""
Returns specified PDF page as wand.image.Image png.
:param PyPDF2.PdfFileReader src_pdf: PDF from which to take pages.
:param int pagenum: Page number to take.
:param int resolution: Resolution for resulting png in DPI.
"""
dst_pdf = PyPDF2.PdfFileWriter()
dst_pdf.addPage(src_pdf.getPage(pagenum))
pdf_bytes = io.BytesIO()
dst_pdf.write(pdf_bytes)
pdf_bytes.seek(0)
img = Image(file=pdf_bytes, resolution=resolution)
img.background_color = Color('white')
img.alpha_channel = 'remove'
img.convert("jpeg")
6 years ago
return img
def get_cover(file_path, filename):
# Main
# ====
print(file_path)
src_filename = file_path
try:
src_pdf = PyPDF2.PdfFileReader(open(src_filename, "rb"))
except Exception:
print("couln't open PDF")
return
if src_pdf.isEncrypted:
try:
src_pdf.decrypt('')
except Exception:
print("couln't decrypt")
return
# What follows is a lookup table of page numbers within sample_log.pdf and
# the corresponding filenames.
6 years ago
pages = [{"pagenum": 0, "filename": filename}]
# Convert each page to a png image.
for page in pages:
big_filename = "xppl/cover/"+page["filename"] + "_cover.jpeg"
6 years ago
img = pdf_page_to_png(src_pdf, pagenum=page["pagenum"], resolution=130)
6 years ago
# Ensmallen
img.transform("", "250")
img.save(filename=big_filename)
6 years ago
return page["filename"] + "_cover.jpeg"