찾다
기술 주변기기일체 포함Python+AI는 오래된 사진을 색칠합니다

Python+AI는 오래된 사진을 색칠합니다

Apr 10, 2023 pm 08:11 PM
pythonaiunet

안녕하세요 여러분.

오늘도 계속해서 흥미로운 AI 프로젝트를 여러분과 공유하겠습니다.

지난번에는 GAN(Generative Adversarial Network)을 사용하여 정적 사진을 움직이는 방법을 공유했습니다.

오늘은 NoGAN의 이미지 향상 기술을 사용하여 오래된 사진에 색상을 입히는 방법을 공유합니다. 효과는 다음과 같습니다.

Python+AI는 오래된 사진을 색칠합니다

원본 이미지

Python+AI는 오래된 사진을 색칠합니다

채색 후

NoGAN은 GAN 학습에 가장 짧은 시간이 걸리는 새로운 유형의 GAN입니다.

오늘 공유한 프로젝트는 이미 GitHub에 오픈소스 프로젝트로 실행되어 있습니다.

1. 준비

먼저 git clone 명령을 사용하여 소스코드를 다운로드합니다.

git clone https<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">:</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">//</span>github<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.com</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">/</span>jantic<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">/</span>DeOldify<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.git</span>

프로젝트 루트 디렉터리에 들어가서 Python 종속성 패키지를 설치하세요.

pip3 install <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span>r requirements<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.txt</span>

프로젝트를 실행하기 위한 코드를 작성하기 전에 사전 훈련된 모델을 다운로드해야 합니다. 이 프로젝트는 세 가지 모델을 제공합니다:

Python+AI는 오래된 사진을 색칠합니다

model

차이점은 다음과 같습니다.

  • ColorizeArtistic_gen.pth: 흥미로운 디테일과 생동감 측면에서 최고 품질의 이미지 색상 효과를 달성합니다. 이 모델은 resnet34를 백본으로 사용합니다. UNet , 5개의 비판적 사전 훈련/GAN 루프 반복 훈련은 NoGAN을 통해 수행되었습니다.
  • ColorizeStable_gen.pth: 풍경과 인물 사진에서 최상의 결과를 얻은 이 모델은 Resnet101을 백본으로 사용하고 NoGAN을 통해 3번의 비평가 사전 훈련/GAN 루프 반복을 통해 UNet에서 훈련되었습니다.
  • ColorizeVideo_gen.pth: 원활한 비디오에 최적화되어 있으며 초기 생성기/비평가 사전 훈련/GAN NoGAN 훈련만 사용합니다. 부드러운 속도를 추구한 탓에 앞선 2종보다 색상이 적다.
  • 다운로드한 모델 파일을 프로젝트 루트 디렉터리의 models 디렉터리에 넣습니다.

2. 코드 작성

프로젝트 루트 디렉토리와 동일한 디렉토리에 Python 파일을 생성하고, 방금 다운로드한 모델 파일을 로드하는 코드를 작성합니다.

<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">from</span> DeOldify<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.deoldify</span><span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.generators</span> import gen_inference_wide<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">from</span> DeOldify<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.deoldify</span><span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.filters</span> import MasterFilter<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> ColorizerFilter<br><br># 指定模型文件<br>learn <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> gen_inference_wide<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>root_folder<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span>Path<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span><span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'./DeOldify'</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> weights_name<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'ColorizeVideo_gen'</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><br><br># 加载模型<br>deoldfly_model <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> MasterFilter<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">[</span>ColorizerFilter<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>learn<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span>learn<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">]</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> render_factor<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">10</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span>

root_folder는 프로젝트 루트 디렉터리를 지정하고, Weights_name은 사진 색상을 지정하는 데 옆에 사용되는 모델을 지정합니다.

오래된 사진을 읽고 색칠하세요.

import cv2<br>import numpy <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">as</span> np<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">from</span> PIL import Image<br><br>img <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> cv2<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.imread</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span><span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'./images/origin.jpg'</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><br>img <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> cv2<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.cvtColor</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>img<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> cv2<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.COLOR_BGR2RGB</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><br>pil_img <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> Image<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.fromarray</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>img<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><br><br>filtered_image <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> deoldfly_model<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.filter</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span><br>pil_img<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> pil_img<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> render_factor<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">35</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> post_process<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(153, 0, 85); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">True</span><br><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><br><br>result_img <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> np<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.asarray</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>filtered_image<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><br>result_img <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> cv2<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.cvtColor</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span>result_img<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> cv2<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.COLOR_RGB2BGR</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span><br>cv2<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">.imwrite</span><span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">(</span><span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'deoldify.jpg'</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">,</span> result_img<span style="color: rgb(153, 153, 119); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">)</span>

cv2를 사용하여 오래된 사진을 읽고, PIL.Image 모듈을 사용하여 이미지를 모델 입력에 필요한 형식으로 변환하고, 색칠을 위해 모델로 보낸 후 저장하세요. 완성.

위 코드는 프로젝트 소스 코드에서 추출한 것입니다. 보시다시피 코드 실행은 매우 간단합니다.

위 내용은 Python+AI는 오래된 사진을 색칠합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 51CTO.COM에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
10 생성 AI 코드의 생성 AI 코딩 확장 대 코드를 탐색해야합니다.10 생성 AI 코드의 생성 AI 코딩 확장 대 코드를 탐색해야합니다.Apr 13, 2025 am 01:14 AM

이봐, 코딩 닌자! 하루 동안 어떤 코딩 관련 작업을 계획 했습니까? 이 블로그에 더 자세히 살펴보기 전에, 나는 당신이 당신의 모든 코딩 관련 문제에 대해 생각하기를 원합니다. 완료? - ’

요리 혁신 요리 : 인공 지능이 식품 서비스를 변화시키는 방법요리 혁신 요리 : 인공 지능이 식품 서비스를 변화시키는 방법Apr 12, 2025 pm 12:09 PM

AI 식품 준비 여전히 초기 사용 중이지만 AI 시스템은 음식 준비에 점점 더 많이 사용되고 있습니다. AI 구동 로봇은 부엌에서 햄버거를 뒤집기, 피자 만들기 또는 SA 조립과 같은 음식 준비 작업을 자동화하는 데 사용됩니다

파이썬 네임 스페이스 및 가변 범위에 대한 포괄적 인 안내서파이썬 네임 스페이스 및 가변 범위에 대한 포괄적 인 안내서Apr 12, 2025 pm 12:00 PM

소개 파이썬 기능에서 변수의 네임 스페이스, 범위 및 동작을 이해하는 것은 효율적으로 작성하고 런타임 오류 또는 예외를 피하는 데 중요합니다. 이 기사에서는 다양한 ASP를 탐구 할 것입니다

비전 언어 모델 (VLMS)에 대한 포괄적 인 안내서비전 언어 모델 (VLMS)에 대한 포괄적 인 안내서Apr 12, 2025 am 11:58 AM

소개 생생한 그림과 조각으로 둘러싸인 아트 갤러리를 걷는 것을 상상해보십시오. 이제 각 작품에 질문을하고 의미있는 대답을 얻을 수 있다면 어떨까요? “어떤 이야기를하고 있습니까?

Mediatek은 Kompanio Ultra 및 Dimensity 9400으로 프리미엄 라인업을 향상시킵니다.Mediatek은 Kompanio Ultra 및 Dimensity 9400으로 프리미엄 라인업을 향상시킵니다.Apr 12, 2025 am 11:52 AM

제품 케이던스를 계속하면서 이번 달 Mediatek은 새로운 Kompanio Ultra and Dimensity 9400을 포함한 일련의 발표를했습니다. 이 제품은 스마트 폰 용 칩을 포함하여 Mediatek 비즈니스의 전통적인 부분을 채우고 있습니다.

이번 주 AI : Walmart는 패션 트렌드를 설정하기 전에 패션 트렌드를 설정합니다.이번 주 AI : Walmart는 패션 트렌드를 설정하기 전에 패션 트렌드를 설정합니다.Apr 12, 2025 am 11:51 AM

#1 Google은 Agent2agent를 시작했습니다 이야기 : 월요일 아침입니다. AI 기반 채용 담당자로서 당신은 더 똑똑하지 않고 더 똑똑하지 않습니다. 휴대 전화에서 회사의 대시 보드에 로그인합니다. 세 가지 중요한 역할이 공급되고, 검증되며, 예정된 FO가 있음을 알려줍니다.

생성 AI는 사이코브블을 만난다생성 AI는 사이코브블을 만난다Apr 12, 2025 am 11:50 AM

나는 당신이되어야한다고 생각합니다. 우리 모두는 Psychobabble이 다양한 심리적 용어를 혼합하고 종종 이해할 수 없거나 완전히 무의미한 모듬 채터로 구성되어 있다는 것을 알고 있습니다. 당신이 fo를 뿌리기 위해해야 ​​할 일

프로토 타입 : 과학자들은 종이를 플라스틱으로 바꿉니다프로토 타입 : 과학자들은 종이를 플라스틱으로 바꿉니다Apr 12, 2025 am 11:49 AM

이번 주 발표 된 새로운 연구에 따르면 2022 년에 제조 된 플라스틱의 9.5%만이 재활용 재료로 만들어졌습니다. 한편, 플라스틱은 계속해서 매립지와 생태계에 전 세계에 쌓이고 있습니다. 그러나 도움이 진행 중입니다. 엥인 팀

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.