soiz1 commited on
Commit
03f50bc
·
verified ·
1 Parent(s): 8253852

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -11
app.py CHANGED
@@ -5,10 +5,10 @@ import img2pdf
5
  import tempfile
6
  import os
7
 
8
- def downscale_pdf(pdf_file, max_width=3000, target_dpi=150):
9
  with tempfile.TemporaryDirectory() as tmpdir:
10
- # ステップ 1: PDF → 画像
11
- images = convert_from_path(pdf_file.name, dpi=300, fmt='jpeg', output_folder=tmpdir)
12
 
13
  downscaled_images = []
14
  for i, img in enumerate(images):
@@ -28,22 +28,32 @@ def downscale_pdf(pdf_file, max_width=3000, target_dpi=150):
28
 
29
  tmp_image_path = os.path.join(tmpdir, f"page_{i+1}.jpg")
30
  img.save(tmp_image_path, "JPEG", quality=90)
31
- downscaled_images.append(tmp_image_path)
32
 
33
- # ステップ 2: 画像 → PDF
34
- output_pdf_path = os.path.join(tmpdir, "downscaled.pdf")
35
- with open(output_pdf_path, "wb") as f:
36
- # DPIを指定してPDF内の実寸を制御
37
- f.write(img2pdf.convert(downscaled_images, dpi=target_dpi))
 
 
 
 
 
 
 
 
 
 
38
 
39
- # ✅ Gradio返却用に一時ファイルにコピー
40
  final_pdf_file = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf")
41
- with open(output_pdf_path, "rb") as src, open(final_pdf_file.name, "wb") as dst:
42
  dst.write(src.read())
43
 
44
  return final_pdf_file.name
45
 
46
 
 
47
  with gr.Blocks() as demo:
48
  gr.Markdown("## PDFダウンサイザー for Audiveris")
49
  gr.Markdown(
 
5
  import tempfile
6
  import os
7
 
8
+ def downscale_pdf(pdf_file, max_width=3000, input_dpi=150):
9
  with tempfile.TemporaryDirectory() as tmpdir:
10
+ # 1. dpiを下げて読み込み(元が300なら150に半減)
11
+ images = convert_from_path(pdf_file.name, dpi=input_dpi, fmt='jpeg', output_folder=tmpdir)
12
 
13
  downscaled_images = []
14
  for i, img in enumerate(images):
 
28
 
29
  tmp_image_path = os.path.join(tmpdir, f"page_{i+1}.jpg")
30
  img.save(tmp_image_path, "JPEG", quality=90)
31
+ downscaled_images.append((tmp_image_path, (new_w, new_h)))
32
 
33
+ # 2. img2pdfのdpiを画像サイズから計算する
34
+ # dpi = (元画像のdpi) * (縮小率)
35
+ # 今回は画像のピクセル数が縮小されているので、それに対応するdpiを設定する
36
+ # ここでは単純に input_dpi をそのまま使うことも可
37
+
38
+ pdf_bytes = b""
39
+ layout_fun = img2pdf.get_layout_fun(pagesize=None) # デフォルトページサイズ
40
+
41
+ with open(os.path.join(tmpdir, "downscaled.pdf"), "wb") as f:
42
+ f.write(
43
+ img2pdf.convert(
44
+ [path for path, size in downscaled_images],
45
+ dpi=input_dpi,
46
+ )
47
+ )
48
 
 
49
  final_pdf_file = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf")
50
+ with open(os.path.join(tmpdir, "downscaled.pdf"), "rb") as src, open(final_pdf_file.name, "wb") as dst:
51
  dst.write(src.read())
52
 
53
  return final_pdf_file.name
54
 
55
 
56
+
57
  with gr.Blocks() as demo:
58
  gr.Markdown("## PDFダウンサイザー for Audiveris")
59
  gr.Markdown(