Update app.py
Browse files
app.py
CHANGED
|
@@ -1,108 +1,4 @@
|
|
| 1 |
-
gr
|
| 2 |
-
### 사용 방법
|
| 3 |
-
1. 메모장에서 폰트 파일명을 한 줄에 하나씩 입력
|
| 4 |
-
2. txt 파일로 저장 후 업로드
|
| 5 |
-
3. 분석 결과 확인 및 엑셀 다운로드
|
| 6 |
-
|
| 7 |
-
**예시 파일 내용:**
|
| 8 |
-
```
|
| 9 |
-
NanumGothic.ttf
|
| 10 |
-
Pretendard-Regular.otf
|
| 11 |
-
BMDOHYEON_ttf.ttf
|
| 12 |
-
```
|
| 13 |
-
""")
|
| 14 |
-
|
| 15 |
-
with gr.Column(scale=2):
|
| 16 |
-
gr.Markdown("## 📊 분석 결과")
|
| 17 |
-
|
| 18 |
-
summary_output = gr.Markdown("파일을 업로드하세요.")
|
| 19 |
-
|
| 20 |
-
result_table = gr.Dataframe(
|
| 21 |
-
headers=["원본 파일명", "폰트명", "라이선스", "상업적 사용", "출처 표시", "수정 가능", "제공처", "제공처 URL", "비고"],
|
| 22 |
-
label="폰트 라이선스 정보",
|
| 23 |
-
column_widths=["15%", "12%", "15%", "10%", "8%", "8%", "12%", "20%", "20%"],
|
| 24 |
-
interactive=True
|
| 25 |
-
)
|
| 26 |
-
|
| 27 |
-
excel_download = gr.File(label="📥 엑셀 다운로드", visible=False)
|
| 28 |
-
|
| 29 |
-
with gr.Accordion("📋 샘플 결과", open=False):
|
| 30 |
-
sample_data = [
|
| 31 |
-
["NanumGothic.ttf", "나눔고딕", "SIL OFL 1.1", "✅ 가능", "불필요", "가능", "네이버", "https://hangeul.naver.com/2017/nanum", "OFL 1.1 라이선스로 상업적 사용 자유, 출처 표시 불필요"],
|
| 32 |
-
["Pretendard-Regular.otf", "프리텐다드", "SIL OFL 1.1", "✅ 가능", "불필요", "가능", "Kil Hyung-jin", "https://github.com/orioncactus/pretendard", "OFL 1.1 라이선스로 상업적 사용 자유, 출처 표시 불필요"],
|
| 33 |
-
["YoonGothic.ttf", "윤고딕", "상업적 라이선스 필요", "❌ 유료", "해당없음", "라이선스에 따라", "윤디자인그룹", "https://www.yoondesign.com", "개인 사용만 무료, 상업적 사용 시 유료 라이선스 구매 필요"],
|
| 34 |
-
["KoPubWorldDotum.ttf", "KoPubWorld돋움체", "공공누리 제1유형", "✅ 가능", "필요", "가능", "한국출판인쇄문화협회", "http://www.kopus.org/biz/electronic/font.aspx", "공공누리 제1유형: 출처표시 조건으로 자유이용 가능"]
|
| 35 |
-
]
|
| 36 |
-
|
| 37 |
-
gr.Dataframe(
|
| 38 |
-
value=sample_data,
|
| 39 |
-
headers=["원본 파일명", "폰트명", "라이선스", "상업적 사용", "출처 표시", "수정 가능", "제공처", "제공처 URL", "비고"],
|
| 40 |
-
column_widths=["15%", "12%", "15%", "10%", "8%", "8%", "12%", "20%", "20%"]
|
| 41 |
-
)
|
| 42 |
-
|
| 43 |
-
with gr.Accordion("ℹ️ 라이선스 유형 설명", open=False):
|
| 44 |
-
gr.Markdown("""
|
| 45 |
-
### 주요 라이선스 유형 (재검증됨)
|
| 46 |
-
|
| 47 |
-
**✅ SIL OFL 1.1 (Open Font License)**
|
| 48 |
-
- 상업적 사용: 완전 자유
|
| 49 |
-
- 출처 표시: 불필요
|
| 50 |
-
- 수정/재배포: 가능
|
| 51 |
-
- 웹폰트 사용: 가능
|
| 52 |
-
|
| 53 |
-
**✅ 커스텀 무료 라이선스**
|
| 54 |
-
- 각 제작사별 고유 조건
|
| 55 |
-
- 대부분 상업적 사용 가능
|
| 56 |
-
- 일부 제한사항 존재 (BI 사용 금지 등)
|
| 57 |
-
|
| 58 |
-
**✅ 공공누리 제1유형**
|
| 59 |
-
- 공공기관에서 제작한 폰트
|
| 60 |
-
- 출처표시 조건으로 자유이용 가능
|
| 61 |
-
- 상업적 사용 가능
|
| 62 |
-
|
| 63 |
-
**❌ 상업적 라이선스 필요**
|
| 64 |
-
- 개인 사용: 무료
|
| 65 |
-
- 상업적 사용: 유료 라이선스 구매 필요
|
| 66 |
-
- 주로 전문 폰트 제작사 폰트들
|
| 67 |
-
|
| 68 |
-
**❓ 확인 필요**
|
| 69 |
-
- 데이터베이스에 정보가 없는 폰트
|
| 70 |
-
- 제작사 공식 사이트에서 직접 확인 필요
|
| 71 |
-
""")
|
| 72 |
-
|
| 73 |
-
gr.Markdown("""
|
| 74 |
-
### ⚠️ 안내사항
|
| 75 |
-
- 참고용 도구입니다. 상업적 사용 전 공def create_app():
|
| 76 |
-
with gr.Blocks(title="한국어 폰트 라이선스 분석기") as app:
|
| 77 |
-
|
| 78 |
-
gr.Markdown("""
|
| 79 |
-
# 🔍 한국어 폰트 라이선스 분석기
|
| 80 |
-
|
| 81 |
-
**폰트 목록을 업로드하면 라이선스 정보를 분석하여 엑셀로 제공합니다!**
|
| 82 |
-
""")
|
| 83 |
-
|
| 84 |
-
with gr.Row():
|
| 85 |
-
with gr.Column(scale=1):
|
| 86 |
-
gr.Markdown("## 📁 폰트 목록 파일 업로드")
|
| 87 |
-
|
| 88 |
-
file_input = gr.File(
|
| 89 |
-
label="폰트 목록 텍스트 파일 (.txt)",
|
| 90 |
-
file_types=[".txt"]
|
| 91 |
-
)
|
| 92 |
-
|
| 93 |
-
analyze_btn = gr.Button("🔍 라이선스 분석 시작", variant="primary")
|
| 94 |
-
|
| 95 |
-
gr.Markdown("""
|
| 96 |
-
### 사용 방법
|
| 97 |
-
1. 메모장에서 폰트 파일명을 한 줄에 하나씩 입력
|
| 98 |
-
2. txt 파일로 저장 후 업로드
|
| 99 |
-
3. 분석 결과 확인 및 엑셀 다운로드
|
| 100 |
-
|
| 101 |
-
**예시 파일 내용:**
|
| 102 |
-
```
|
| 103 |
-
NanumGothic.ttf
|
| 104 |
-
Pretendard-Regular.otf
|
| 105 |
-
BMDOHYEON_ttimport gradio as gr
|
| 106 |
import pandas as pd
|
| 107 |
import io
|
| 108 |
import re
|
|
@@ -617,57 +513,48 @@ def create_app():
|
|
| 617 |
|
| 618 |
result_table = gr.Dataframe(
|
| 619 |
headers=["원본 파일명", "폰트명", "라이선스", "상업적 사용", "출처 표시", "수정 가능", "제공처", "제공처 URL", "비고"],
|
| 620 |
-
label="폰트 라이선스 정보"
|
|
|
|
|
|
|
| 621 |
)
|
| 622 |
|
| 623 |
excel_download = gr.File(label="📥 엑셀 다운로드", visible=False)
|
| 624 |
|
| 625 |
with gr.Accordion("📋 샘플 결과", open=False):
|
| 626 |
sample_data = [
|
| 627 |
-
["NanumGothic.ttf", "나눔고딕", "SIL OFL 1.1", "✅ 가능", "불필요", "가능", "네이버", "https://hangeul.naver.com/2017/nanum", "
|
| 628 |
-
["Pretendard-Regular.otf", "
|
| 629 |
-
["YoonGothic.ttf", "윤고딕", "상업적 라이선스 필요", "❌ 유료", "해당없음", "라이선스에 따라", "윤디자인그룹", "https://www.yoondesign.com", "개인 사용만
|
|
|
|
| 630 |
]
|
| 631 |
|
| 632 |
gr.Dataframe(
|
| 633 |
value=sample_data,
|
| 634 |
-
headers=["원본 파일명", "폰트명", "라이선스", "상업적 사용", "출처 표시", "수정 가능", "제공처", "제공처 URL", "비고"]
|
|
|
|
| 635 |
)
|
| 636 |
|
| 637 |
-
gr.
|
| 638 |
-
|
| 639 |
-
|
| 640 |
-
- 총 80여개 한국어 폰트 정보를 제공합니다.
|
| 641 |
-
""")
|
| 642 |
-
|
| 643 |
-
def handle_analysis(file):
|
| 644 |
-
if file is None:
|
| 645 |
-
return "파일을 업로드해주세요.", None, gr.File(visible=False)
|
| 646 |
|
| 647 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 648 |
|
| 649 |
-
|
| 650 |
-
|
|
|
|
|
|
|
| 651 |
|
| 652 |
-
|
| 653 |
-
|
| 654 |
-
|
| 655 |
-
|
| 656 |
-
|
| 657 |
-
|
| 658 |
-
|
| 659 |
-
|
| 660 |
-
|
| 661 |
-
)
|
| 662 |
-
|
| 663 |
-
file_input.change(
|
| 664 |
-
fn=handle_analysis,
|
| 665 |
-
inputs=file_input,
|
| 666 |
-
outputs=[summary_output, result_table, excel_download]
|
| 667 |
-
)
|
| 668 |
-
|
| 669 |
-
return app
|
| 670 |
-
|
| 671 |
-
if __name__ == "__main__":
|
| 672 |
-
app = create_app()
|
| 673 |
-
app.launch()
|
|
|
|
| 1 |
+
import gradio as gr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
import pandas as pd
|
| 3 |
import io
|
| 4 |
import re
|
|
|
|
| 513 |
|
| 514 |
result_table = gr.Dataframe(
|
| 515 |
headers=["원본 파일명", "폰트명", "라이선스", "상업적 사용", "출처 표시", "수정 가능", "제공처", "제공처 URL", "비고"],
|
| 516 |
+
label="폰트 라이선스 정보",
|
| 517 |
+
column_widths=["15%", "12%", "15%", "10%", "8%", "8%", "12%", "20%", "20%"],
|
| 518 |
+
interactive=True
|
| 519 |
)
|
| 520 |
|
| 521 |
excel_download = gr.File(label="📥 엑셀 다운로드", visible=False)
|
| 522 |
|
| 523 |
with gr.Accordion("📋 샘플 결과", open=False):
|
| 524 |
sample_data = [
|
| 525 |
+
["NanumGothic.ttf", "나눔고딕", "SIL OFL 1.1", "✅ 가능", "불필요", "가능", "네이버", "https://hangeul.naver.com/2017/nanum", "OFL 1.1 라이선스로 상업적 사용 자유, 출처 표시 불필요"],
|
| 526 |
+
["Pretendard-Regular.otf", "프리텐다드", "SIL OFL 1.1", "✅ 가능", "불필요", "가능", "Kil Hyung-jin", "https://github.com/orioncactus/pretendard", "OFL 1.1 라이선스로 상업적 사용 자유, 출처 표시 불필요"],
|
| 527 |
+
["YoonGothic.ttf", "윤고딕", "상업적 라이선스 필요", "❌ 유료", "해당없음", "라이선스에 따라", "윤디자인그룹", "https://www.yoondesign.com", "개인 사용만 무료, 상업적 사용 시 유료 라이선스 구매 필요"],
|
| 528 |
+
["KoPubWorldDotum.ttf", "KoPubWorld돋움체", "공공누리 제1유형", "✅ 가능", "필요", "가능", "한국출판인쇄문화협회", "http://www.kopus.org/biz/electronic/font.aspx", "공공누리 제1유형: 출처표시 조건으로 자유이용 가능"]
|
| 529 |
]
|
| 530 |
|
| 531 |
gr.Dataframe(
|
| 532 |
value=sample_data,
|
| 533 |
+
headers=["원본 파일명", "폰트명", "라이선스", "상업적 사용", "출처 표시", "수정 가능", "제공처", "제공처 URL", "비고"],
|
| 534 |
+
column_widths=["15%", "12%", "15%", "10%", "8%", "8%", "12%", "20%", "20%"]
|
| 535 |
)
|
| 536 |
|
| 537 |
+
with gr.Accordion("ℹ️ 라이선스 유형 설명", open=False):
|
| 538 |
+
gr.Markdown("""
|
| 539 |
+
### 주요 라이선스 유형 (재검증됨)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 540 |
|
| 541 |
+
**✅ SIL OFL 1.1 (Open Font License)**
|
| 542 |
+
- 상업적 사용: 완전 자유
|
| 543 |
+
- 출처 표시: 불필요
|
| 544 |
+
- 수정/재배포: 가능
|
| 545 |
+
- 웹폰트 사용: 가능
|
| 546 |
|
| 547 |
+
**✅ 커스텀 무료 라이선스**
|
| 548 |
+
- 각 제작사별 고유 조건
|
| 549 |
+
- 대부분 상업적 사용 가능
|
| 550 |
+
- 일부 제한사항 존재 (BI 사용 금지 등)
|
| 551 |
|
| 552 |
+
**✅ 공공누리 제1유형**
|
| 553 |
+
- 공공기관에서 제작한 폰트
|
| 554 |
+
- 출처표시 조건으로 자유이용 가능
|
| 555 |
+
- 상업적 사용 가능
|
| 556 |
+
|
| 557 |
+
**❌ 상업적 라이선스 필요**
|
| 558 |
+
- 개인 사용: 무료
|
| 559 |
+
- 상업적 사용: 유료 라이선스 구매 필요
|
| 560 |
+
- 주로 전문 폰
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|