Pillow คือ Essential Python Imaging Library
Pillow เป็นทางแยกที่ทันสมัยและได้รับการดูแลอย่างดีของ Python Imaging Library (PIL) หน้าที่หลักของมันคือการให้ความสามารถในการประมวลผลภาพที่แข็งแกร่งและมีประสิทธิภาพโดยตรงภายในสคริปต์ Python คุณสามารถเปิด จัดการ กรอง ปรับปรุง และบันทึกรูปแบบรูปภาพได้มากมายโดยไม่ต้องพึ่งโปรแกรมแก้ไขภายนอก ตัวอย่างเช่น การแปลงรูปภาพ JPEG 100 ภาพเป็น PNG และปรับขนาดเป็น 50% ใช้เวลาน้อยกว่า 2 วินาที ด้วยการทำงานของหมอนที่ปรับให้เหมาะสม
หากคุณต้องการดำเนินการแบบกลุ่ม เพิ่มลายน้ำ แยกข้อมูลเมตา หรือสร้างภาพขนาดย่อโดยทางโปรแกรม Pillow คือคำตอบโดยตรง งานอัตโนมัติในการประมวลผลภาพที่ใช้ Python มากกว่า 70% ใช้ Pillow เป็นไลบรารีหลัก ตามสถิติการดาวน์โหลด PyPI
หากต้องการใช้ Pillow อย่างมีประสิทธิภาพ คุณต้องเข้าใจขั้นตอนการทำงานหลัก: เปิด → กระบวนการ → บันทึก ด้านล่างนี้เป็นการใช้งานจริงพร้อมตัวอย่างโค้ดจริง
วิ่ง pip ติดตั้งหมอน . ยืนยันด้วย python -c "จาก PIL นำเข้ารูปภาพ; พิมพ์ (Image.__version__)" . การติดตั้งโดยทั่วไปใช้เวลาน้อยกว่า 30 วินาที บนการเชื่อมต่อบรอดแบนด์มาตรฐาน
img = Image.open("input.jpg").convert("RGB") – จำเป็นสำหรับความสม่ำเสมอ img.ภาพย่อ((800, 800)) – คงอัตราส่วนไม่บิดเบือน สำหรับไฟล์ใน os.listdir("folder"): img.save("output.png", ปรับให้เหมาะสม=จริง, คุณภาพ=85) – ลดขนาดไฟล์ได้ถึง 40% โดยไม่สูญเสียคุณภาพที่มองเห็นได้ สคริปต์ต่อไปนี้จะประมวลผล JPEG ทั้งหมดในไดเร็กทอรี โดยสร้างภาพขนาดย่อ 256x256 พิกเซลโดยยังคงรักษาข้อมูลเมตาไว้ จะช่วยลดเวลาการประมวลผลทั้งหมดลง 65% เมื่อเทียบกับลูปที่ไม่ได้รับการปรับให้เหมาะสมตามลำดับ โดยใช้การดำเนินงานแบบแทนที่
จากรูปภาพนำเข้า PILนำเข้าระบบปฏิบัติการสำหรับชื่อไฟล์ใน os.listdir("Originals"): ถ้า filename.endswith(".jpg"): img = Image.open(os.path.join("ต้นฉบับ", ชื่อไฟล์)) img.รูปขนาดย่อ((256, 256)) img.save(f"thumbnails/{filename}", "JPEG", quality=85) print(f"Thumbnail created: {filename}") Pillow มีฟังก์ชันในตัวมากกว่า 50 รายการใน 8 หมวดหมู่หลัก ด้านล่างนี้เป็นตารางที่มีโครงสร้างซึ่งแสดงฟังก์ชันหลัก กรณีการใช้งานทั่วไป และเมตริกประสิทธิภาพในโลกแห่งความเป็นจริง
| หมวดหมู่ฟังก์ชัน | วิธีการที่สำคัญ | การใช้งานทั่วไป | เฉลี่ย เวลา (มิลลิวินาที) |
|---|---|---|---|
| การแปลงรูปแบบ | .บันทึก(, รูปแบบ=) | PNG ↔ JPEG ↔ BMP | 12–35 |
| การแปลงทางเรขาคณิต | .resize(), .rotate(), .ครอบตัด() | รูปขนาดย่อ, การจัดตำแหน่ง | 8–45 |
| การดำเนินงานสี | .แปลง(), .จุด() | ระดับสีเทา, ความสว่าง | 3–10 |
| การกรองและการเพิ่มประสิทธิภาพ | ฟิลเตอร์ภาพ, เพิ่มประสิทธิภาพภาพ | เบลอ คมชัด คอนทราสต์ | 15–60 |
| การวาดภาพและข้อความ | ImageDraw.วาด() | ลายน้ำคำอธิบายประกอบ | 20–80 |
Pillow ลดความยาวของโค้ดประมวลผลภาพโดยเฉลี่ย 73% เมื่อเทียบกับโซลูชัน Python ดั้งเดิม (เช่น การวนซ้ำพิกเซลด้วยตนเอง) ตัวอย่างเช่น การใช้การเบลอแบบเกาส์เซียนกับ Python ดั้งเดิมนั้นต้องใช้การวนซ้ำประมาณ 15 บรรทัด กับหมอนก็เป็นได้ img.filter(ImageFilter.GaussianBlur(รัศมี=2)) – หนึ่งบรรทัด
จากฟอรัมชุมชนและปัญหา GitHub นี่คือคำถามที่พบบ่อย 6 อันดับแรกเกี่ยวกับ Pillow พร้อมคำตอบโดยตรงที่นำไปปฏิบัติได้
ใช่. ใช้ Image.open("animated.gif") และวนซ้ำผ่านเฟรมด้วย แสวงหา() . Pillow สามารถอ่านและเขียน GIF แบบเคลื่อนไหวได้ โดยรักษาข้อมูลเวลาด้วยความแม่นยำสูงสุด 1 มิลลิวินาที ตัวอย่าง: แยกเฟรมทั้งหมดเพื่อแยกภาพภายในเวลาไม่ถึง 0.5 วินาทีสำหรับ GIF ขนาด 20 เฟรม
ใช้ รูปภาพ.เปิด().แปลง() และแปรรูปเป็นชิ้นๆ ด้วย .crop() . สำหรับรูปภาพ 100MP การโหลดแบบ Lazy Loading ของ Pillow ใช้พื้นที่เพียง 5-10MB ในตอนแรก แทนที่จะโหลดทั้งภาพ นอกจากนี้ให้ระบุ รูปภาพ. LANCZOS เพื่อการสุ่มตัวอย่างคุณภาพสูงซึ่งใช้หน่วยความจำอย่างมีประสิทธิภาพ
Pillow รองรับรูปแบบมากกว่า 30 รูปแบบ รวมถึง JPEG, PNG, TIFF, BMP, GIF, WebP และ ICO การสนับสนุน WebP ใน Pillow ให้การบีบอัดได้ดีกว่า JPEG 25-35% ในคุณภาพเดียวกัน (อิงจากการศึกษา WebP ของ Google) วิธีตรวจสอบรูปแบบที่รองรับทั้งหมด: จากคุณสมบัติการนำเข้า PIL features.get_suppหรือted() .
สำหรับ I/O พื้นฐานและการแปลงแบบธรรมดา (ปรับขนาด ครอบตัด การแปลงรูปแบบ) Pillow เร็วกว่า OpenCV 15-30% บนฮาร์ดแวร์เดียวกัน เพราะมันมีค่าใช้จ่ายต่ำกว่า สำหรับคอมพิวเตอร์วิทัศน์ที่ซับซ้อน (การตรวจจับคุณสมบัติ การจับคู่) OpenCV นั้นเหนือกว่า เลือก Pillow เสมอสำหรับการประมวลผลภาพแบบกลุ่มอัตโนมัติ
ใช้ รูปภาพ.alpha_composite() or .วาง() ด้วยการซ้อนทับแบบโปร่งใส ชุดภาพ 1,000 ภาพ (แต่ละภาพ 2MB) สามารถใส่ลายน้ำได้ในเวลาประมาณ 45 วินาที โดยใช้วิธี for-loop และ Pillow's Draw อย่างง่าย ดูตัวอย่างโค้ดภายใต้ส่วน "วิธีการใช้ประโยชน์" สำหรับโครงสร้าง
ใช่. แปลงระหว่างอาร์เรย์ Pillow และ NumPy: np.อาร์เรย์(img) และ รูปภาพ.fromarray(arr) . การบูรณาการนี้ใช้ใน 85% ของไปป์ไลน์รูปภาพวิทยาศาสตร์ข้อมูล (การสำรวจ Kaggle, 2024) ช่วยให้สามารถผสมผสานความเร็ว I/O ของ Pillow เข้ากับการดำเนินการทางคณิตศาสตร์ของ NumPy ได้อย่างราบรื่น
เพื่อเพิ่มประสิทธิภาพสูงสุดของ Pillow ให้ปฏิบัติตามแนวทางที่มีหลักฐานเชิงประจักษ์เหล่านี้:
โดยสรุป Pillow เป็นโซลูชั่นขั้นสุดท้ายสำหรับการประมวลผลภาพ Python สำหรับงานที่ไม่ต้องใช้วิดีโอแบบเรียลไทม์หรือการแปลง 3D การผสมผสานระหว่างความเร็ว (~0.2 วินาทีต่ออิมเมจ 12MP สำหรับการทำงานพื้นฐาน) การรองรับรูปแบบ (30 ประเภท) และ API ที่สะอาด ทำให้กลายเป็นมาตรฐานอุตสาหกรรมสำหรับสคริปต์อัตโนมัติ แบ็กเอนด์เว็บ และไปป์ไลน์การเตรียมข้อมูล