GiantPandas commited on
Commit
2243f21
·
verified ·
1 Parent(s): 4ea4acb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -89
app.py CHANGED
@@ -280,7 +280,7 @@ def to_file(image_path):
280
 
281
 
282
 
283
- def files_to_b64(files, pdf_dpi: int = 200):
284
  """
285
  把上传文件统一转成 base64 图片列表。
286
  • 普通图片:直接 base64
@@ -291,44 +291,42 @@ def files_to_b64(files, pdf_dpi: int = 200):
291
  List[str] 每个元素形如 "data:image/png;base64,xxxx..."
292
  """
293
  out: list[str] = []
294
-
295
- for f in files:
296
- # ---------- Gradio 4.x NamedString / FileData ----------
297
- if hasattr(f, "data"): # 新版 FileData / NamedString
298
- raw_bytes = f.data
299
- suffix = pathlib.Path(f.name).suffix.lower()
300
-
301
- # -- PDF --
302
- if suffix == ".pdf":
303
- pages = convert_from_bytes(raw_bytes, dpi=pdf_dpi)
304
- for page in pages:
305
- buf = BytesIO()
306
- page.save(buf, format="PNG")
307
- b64 = base64.b64encode(buf.getvalue()).decode()
308
- out.append(f"data:image/png;base64,{b64}")
309
- continue # 进入下一文件
310
-
311
- # -- 普通图片 --
312
- b64 = base64.b64encode(raw_bytes).decode()
313
- out.append(f"data:image/{suffix[1:]};base64,{b64}")
314
-
315
- # ---------- 旧版:直接获得文件路径 ----------
316
- else:
317
- path = pathlib.Path(f)
318
- suffix = path.suffix.lower()
319
-
320
- if suffix == ".pdf":
321
- pages = convert_from_path(str(path), dpi=pdf_dpi)
322
- for page in pages:
323
- buf = BytesIO()
324
- page.save(buf, format="PNG")
325
- b64 = base64.b64encode(buf.getvalue()).decode()
326
- out.append(f"data:image/png;base64,{b64}")
327
- continue
328
-
329
- raw_bytes = path.read_bytes()
330
- b64 = base64.b64encode(raw_bytes).decode()
331
- out.append(f"data:image/{suffix[1:]};base64,{b64}")
332
 
333
  return out
334
 
@@ -368,61 +366,14 @@ if __name__ == '__main__':
368
  with gr.Row():
369
  change_bu = gr.Button('Parse')
370
  clear_bu = gr.ClearButton(value='Clear')
371
- pdf_show = PDF(label='Preview', interactive=False, visible=True, height=800)
372
-
373
-
374
 
375
  with gr.Row():
376
- prev_btn = gr.Button("⬅️ 上一张")
377
- next_btn = gr.Button("下一张 ➡️")
378
- zoom = gr.Slider(0.5, 3, value=1, step=0.1, label="缩放倍数")
379
 
380
- # HTML 容器
381
  viewer = gr.HTML()
382
 
383
- # ---- 状态变量 ----
384
- img_list_state = gr.State([]) # base64 列表
385
- idx_state = gr.State(0) # 当前索引
386
-
387
- # ---- 事件逻辑 ----
388
- def upload_handler(files):
389
- b64s = files_to_b64(files)
390
- return b64s, 0, render_img(b64s, 0, 1)
391
-
392
- file.change(
393
- upload_handler,
394
- inputs=file,
395
- outputs=[img_list_state, idx_state, viewer],
396
- )
397
-
398
- def show_prev(b64s, idx, scale):
399
- idx -= 1
400
- return idx, render_img(b64s, idx, scale)
401
-
402
- prev_btn.click(
403
- show_prev,
404
- inputs=[img_list_state, idx_state, zoom],
405
- outputs=[idx_state, viewer],
406
- )
407
-
408
- def show_next(b64s, idx, scale):
409
- idx += 1
410
- return idx, render_img(b64s, idx, scale)
411
-
412
- next_btn.click(
413
- show_next,
414
- inputs=[img_list_state, idx_state, zoom],
415
- outputs=[idx_state, viewer],
416
- )
417
-
418
- # 缩放滑块变化
419
- zoom.change(
420
- lambda b64s, idx, scale: render_img(b64s, idx, scale),
421
- inputs=[img_list_state, idx_state, zoom],
422
- outputs=viewer,
423
- )
424
-
425
-
426
  example_root = os.path.join(os.path.dirname(__file__), 'examples')
427
  images = [
428
  os.path.join(example_root, f)
@@ -474,6 +425,47 @@ if __name__ == '__main__':
474
 
475
  # file.change(fn=process_file, inputs=file, outputs=pdf_show)
476
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
 
478
  change_bu.click(
479
  fn=check_prompt,
 
280
 
281
 
282
 
283
+ def files_to_b64(file, pdf_dpi: int = 200):
284
  """
285
  把上传文件统一转成 base64 图片列表。
286
  • 普通图片:直接 base64
 
291
  List[str] 每个元素形如 "data:image/png;base64,xxxx..."
292
  """
293
  out: list[str] = []
294
+ # ---------- Gradio 4.x NamedString / FileData ----------
295
+ if hasattr(file, "data"): # 新版 FileData / NamedString
296
+ raw_bytes = file.data
297
+ suffix = pathlib.Path(file.name).suffix.lower()
298
+
299
+ # -- PDF --
300
+ if suffix == ".pdf":
301
+ pages = convert_from_bytes(raw_bytes, dpi=pdf_dpi)
302
+ for page in pages:
303
+ buf = BytesIO()
304
+ page.save(buf, format="PNG")
305
+ b64 = base64.b64encode(buf.getvalue()).decode()
306
+ out.append(f"data:image/png;base64,{b64}")
307
+ continue # 进入下一文件
308
+
309
+ # -- 普通图片 --
310
+ b64 = base64.b64encode(raw_bytes).decode()
311
+ out.append(f"data:image/{suffix[1:]};base64,{b64}")
312
+
313
+ # ---------- 旧版:直接获得文件路径 ----------
314
+ else:
315
+ path = pathlib.Path(file)
316
+ suffix = path.suffix.lower()
317
+
318
+ if suffix == ".pdf":
319
+ pages = convert_from_path(str(path), dpi=pdf_dpi)
320
+ for page in pages:
321
+ buf = BytesIO()
322
+ page.save(buf, format="PNG")
323
+ b64 = base64.b64encode(buf.getvalue()).decode()
324
+ out.append(f"data:image/png;base64,{b64}")
325
+ continue
326
+
327
+ raw_bytes = path.read_bytes()
328
+ b64 = base64.b64encode(raw_bytes).decode()
329
+ out.append(f"data:image/{suffix[1:]};base64,{b64}")
 
 
330
 
331
  return out
332
 
 
366
  with gr.Row():
367
  change_bu = gr.Button('Parse')
368
  clear_bu = gr.ClearButton(value='Clear')
 
 
 
369
 
370
  with gr.Row():
371
+ prev_btn = gr.Button("⬅️ Pre")
372
+ next_btn = gr.Button("Next ➡️")
373
+ zoom = gr.Slider(0.5, 3, value=1, step=0.1, label="Scale")
374
 
 
375
  viewer = gr.HTML()
376
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
377
  example_root = os.path.join(os.path.dirname(__file__), 'examples')
378
  images = [
379
  os.path.join(example_root, f)
 
425
 
426
  # file.change(fn=process_file, inputs=file, outputs=pdf_show)
427
 
428
+ img_list_state = gr.State([]) # base64 列表
429
+ idx_state = gr.State(0) # 当前索引
430
+
431
+ def upload_handler(files):
432
+ b64s = files_to_b64(files)
433
+ return b64s, 0, render_img(b64s, 0, 1)
434
+
435
+ file.change(
436
+ upload_handler,
437
+ inputs=file,
438
+ outputs=[img_list_state, idx_state, viewer],
439
+ )
440
+
441
+ def show_prev(b64s, idx, scale):
442
+ idx -= 1
443
+ return idx, render_img(b64s, idx, scale)
444
+
445
+ prev_btn.click(
446
+ show_prev,
447
+ inputs=[img_list_state, idx_state, zoom],
448
+ outputs=[idx_state, viewer],
449
+ )
450
+
451
+ def show_next(b64s, idx, scale):
452
+ idx += 1
453
+ return idx, render_img(b64s, idx, scale)
454
+
455
+ next_btn.click(
456
+ show_next,
457
+ inputs=[img_list_state, idx_state, zoom],
458
+ outputs=[idx_state, viewer],
459
+ )
460
+
461
+ # 缩放滑块变化
462
+ zoom.change(
463
+ lambda b64s, idx, scale: render_img(b64s, idx, scale),
464
+ inputs=[img_list_state, idx_state, zoom],
465
+ outputs=viewer,
466
+ )
467
+
468
+
469
 
470
  change_bu.click(
471
  fn=check_prompt,