แปลงรูปเป็น .webp ด้วย python ช่วยลดขนาดไฟล์ภาพ โดยที่สูญเสียคุณภาพน้อยที่สุด

Posted by tospichai on Nov 17, 2021
profile
tospichai

Posted on Nov 17, 2021

#webp #python #laravel

Webp เป็นมาตรฐานไฟล์ภาพของ Google ที่มีการบีบอัดไฟล์ภาพ ช่วยลดขนาดไฟล์ได้มาก โดยที่คุณภาพไฟล์ภาพยังคมชัด การทำเว็บไซต์ ขนาดของไฟล์ภาพก็เป็นสิ่งที่สำคัญที่จะทำให้เว็บดาวน์โหลดได้เร็วขึ้นเป็นอย่างมาก และนี้จะช่วยให้เราสามารถแปลงภาพได้รวดเร็วขึ้น โดยที่ไม่ต้องเปิดเว็บเพื่อ Convert to webp เลย

Webp นั้นยังช่วยเรื่องความเร็วของเว็บไซต์ บีบอัดรูปภาพทำให้รูปภาพมีความชัด โดยที่จะสูญเสียคุณภาพเพียงเล็กน้อย โดยในโค้ดสามารถที่เป็น Quality ได้อีกด้วย โดยจะมีค่าอยู่ที่ 1-10 โดยที่ 10 จะได้คุณภาพที่สูงที่สุด แต่ขนาดไฟล์ภาพจะมากกว่าค่าอื่น แต่ก็น้อยกว่าไฟล์ภาพนามสกุลอื่นๆอย่าง jpg, jpeg, png

มาเริ่มกันเลย โดยแนวคิดของเราคือ สร้างโฟล์เดอร์ขึ้นมาก่อน webp_ตามด้วยวันที่ ตามบรรทัดที่ 5-7 เพื่อที่จะ Save ไฟล์ที่แปลงเสร็จแล้ว หลังจากนั้นเราจะ list ไฟล์ทั้งหมด (os.listdir(".")) ในโฟล์เดอร์ที่ไฟล์ rename.py อยู่ หลังจากนั้นตรวจสอบว่า ใช่ไฟล์ที่ลงท้ายด้วย jpg, png, jpeg รึป่าว (.endswith("jpg")) ถ้าใช่ เราจะทำการแปลงเป็น RGB (image.convert('RGB')) หากไม่แปลงจะทำให้รูปภาพที่มีส่วน transprent หรือส่วนที่โปร่งใส เป็นสีขาว หลังจากนั้น Save เป็นสกุล webp (image.save(ที่อยู่ไฟล์,นามสกุลไฟล์)) หากเราต้องการปรับ Quality ต้องใช้ (image.save(ที่อยู่ไฟล์,นามสกุลไฟล์,optimize=True,Quality={1-10}))

ชื่อไฟล์ rename.py

import os
from PIL import Image
import PIL
from datetime import datetime

now = datetime.now()
current_time = now.strftime("%d-%m-%Y-%H-%M-%S")
os.mkdir('webp_'+current_time)

for filename in os.listdir("."):
    if filename.endswith("jpg") or filename.endswith("png") or filename.endswith("jpeg"):
        image = Image.open(filename)
        image = image.convert('RGB')
        image.save('webp_'+current_time+'/'+filename.split(".")[0]+'.webp', 'webp', optimize = True, quality = 9)
Login