pdf-to-images / src /streamlit_app.py
melvindave's picture
update
7457748 verified
import streamlit as st
import fitz # PyMuPDF
import os
import zipfile
import io
def pdf_to_images(pdf_file, zoom_x=2.0, zoom_y=2.0, image_format="png"):
images = []
pdf_document = fitz.open(stream=pdf_file.read(), filetype="pdf")
for page_num in range(len(pdf_document)):
page = pdf_document.load_page(page_num)
matrix = fitz.Matrix(zoom_x, zoom_y)
pix = page.get_pixmap(matrix=matrix)
img_bytes = pix.tobytes(image_format)
images.append((f"page_{page_num + 1}.{image_format}", img_bytes))
return images
def create_zip(images_dict):
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, "w") as zip_file:
root_folder = "pdf_to_images_output" # Root folder name
for pdf_filename, images in images_dict.items():
folder_name = os.path.splitext(pdf_filename)[0] # Get the filename without extension
for filename, img_bytes in images:
zip_file.writestr(os.path.join(root_folder, folder_name, filename), img_bytes) # Create folder in zip
return zip_buffer.getvalue()
st.title("PDF to Images Converter")
uploaded_files = st.file_uploader("Choose PDF files", type="pdf", accept_multiple_files=True)
if uploaded_files:
image_format = st.radio("Select image format", ["png", "jpeg"]) # User selects image format using radio buttons
zoom_x = 2.0
zoom_y = 2.0
if st.button("Convert to Images"):
images_dict = {}
for uploaded_file in uploaded_files:
with st.spinner(f"Converting {uploaded_file.name} to images..."):
images = pdf_to_images(uploaded_file, zoom_x, zoom_y, image_format) # Pass selected format
images_dict[uploaded_file.name] = images # Store images by PDF filename
zip_file = create_zip(images_dict) # Pass the dictionary of images
st.success(f"Converted {sum(len(images) for images in images_dict.values())} pages to images!")
st.download_button(
label="Download ZIP file",
data=zip_file,
file_name="pdf_to_images_output.zip", # Updated ZIP file name
mime="application/zip"
)
st.markdown("------")
st.text("Created by DonvitoCodes")
st.markdown("[Visit my website](https://donvitocodes.com) | [Buy me a coffee](https://buymeacoffee.com/donvitocodes)")