naohiro701 commited on
Commit
514f14e
·
verified ·
1 Parent(s): a1ed198

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -42
app.py CHANGED
@@ -1,62 +1,54 @@
1
  import streamlit as st
2
- from pdf2image import convert_from_bytes
3
- from PIL import Image
4
  import io
5
  import zipfile
6
- import shutil
7
 
8
  # タイトルと説明
9
- st.title("PDFを高画質PNG画像に変換")
10
  st.write("""
11
- このアプリケーションでは、アップロードしたPDFファイルを高解像度(1000 dpi)のPNG画像に変換します。
12
  変換後、各ページの画像をダウンロード可能なZIPファイルとして提供します。
13
  """)
14
 
15
- # popplerのパスを取得
16
- poppler_path = shutil.which("pdftoppm")
17
- if poppler_path:
18
- st.write(f"Popplerが見つかりました: `{poppler_path}`")
19
- else:
20
- st.error("Popplerが見つかりません。`apt.txt`に`poppler-utils`を追加してください。")
21
-
22
  # ファイルアップロード
23
  uploaded_file = st.file_uploader("PDFファイルをアップロードしてください", type=["pdf"])
24
 
25
  if uploaded_file is not None:
26
  # DPIの設定
27
  dpi = st.slider("解像度(dpi)を選択してください", min_value=100, max_value=3000, value=1000, step=100)
28
-
29
  if st.button("変換開始"):
30
- if not poppler_path:
31
- st.error("Popplerがインストールされていません。`apt.txt`に`poppler-utils`追加し、再デプロイしてください。")
32
- else:
33
- try:
34
- with st.spinner("PDFを画像に変換中..."):
35
- # PDFを画像に変換
36
- images = convert_from_bytes(uploaded_file.read(), dpi=dpi, poppler_path=poppler_path)
37
 
38
  # ZIPファイルの作成
39
  zip_buffer = io.BytesIO()
40
  with zipfile.ZipFile(zip_buffer, "w") as zip_file:
41
- for i, image in enumerate(images):
42
- img_byte_arr = io.BytesIO()
43
- image.save(img_byte_arr, format='PNG')
44
- img_byte_arr.seek(0)
45
- zip_file.writestr(f"page_{i+1}.png", img_byte_arr.read())
46
-
47
- zip_buffer.seek(0)
48
- st.success("変換が完了しました!")
49
- st.download_button(
50
- label="ZIPファイルをダウンロード",
51
- data=zip_buffer,
52
- file_name="pdf_images.zip",
53
- mime="application/zip"
54
- )
55
-
56
- # 各ページの画像を表示(オプション)
57
- st.write("変換された画像:")
58
- for i, image in enumerate(images):
59
- st.image(image, caption=f"ページ {i+1}", use_column_width=True)
60
-
61
- except Exception as e:
62
- st.error(f"変換中にエラーが発生しました: {e}")
 
 
1
  import streamlit as st
2
+ from wand.image import Image
3
+ from wand.color import Color
4
  import io
5
  import zipfile
 
6
 
7
  # タイトルと説明
8
+ st.title("PDFを高画質PNG画像に変換 (Wand)")
9
  st.write("""
10
+ このアプリケーションでは、アップロードしたPDFファイルを高解像度(例:1000 dpi)のPNG画像に変換します。
11
  変換後、各ページの画像をダウンロード可能なZIPファイルとして提供します。
12
  """)
13
 
 
 
 
 
 
 
 
14
  # ファイルアップロード
15
  uploaded_file = st.file_uploader("PDFファイルをアップロードしてください", type=["pdf"])
16
 
17
  if uploaded_file is not None:
18
  # DPIの設定
19
  dpi = st.slider("解像度(dpi)を選択してください", min_value=100, max_value=3000, value=1000, step=100)
20
+
21
  if st.button("変換開始"):
22
+ try:
23
+ with st.spinner("PDF画像に変換中..."):
24
+ with Image(blob=uploaded_file.read(), resolution=dpi) as img:
25
+ img.compression_quality = 100
26
+ img.alpha_channel = False
27
+ images = img.sequence
 
28
 
29
  # ZIPファイルの作成
30
  zip_buffer = io.BytesIO()
31
  with zipfile.ZipFile(zip_buffer, "w") as zip_file:
32
+ for i, page in enumerate(images):
33
+ with Image(page) as page_image:
34
+ png_blob = page_image.make_blob('png')
35
+ zip_file.writestr(f"page_{i+1}.png", png_blob)
36
+
37
+ zip_buffer.seek(0)
38
+ st.success("変換が完了しました!")
39
+ st.download_button(
40
+ label="ZIPファイルをダウンロード",
41
+ data=zip_buffer,
42
+ file_name="pdf_images.zip",
43
+ mime="application/zip"
44
+ )
45
+
46
+ # 各ページの画像を表示(オプション)
47
+ st.write("変換された画像:")
48
+ for i, page in enumerate(images):
49
+ with Image(page) as page_image:
50
+ img = page_image.convert('png')
51
+ st.image(img.make_blob('png'), caption=f"ページ {i+1}", use_column_width=True)
52
+
53
+ except Exception as e:
54
+ st.error(f"変換中にエラーが発生しました: {e}")