آموزش فشرده سازی تصویر با پایتون + ویدیو
سلام دوستای عزیز میکرولرنی 🙂
در این ویدیو که ادامهی مجموعه پروژههای پایتون هست قراره به آموزش فشرده سازی تصویر با پایتون بپردازیم. فشرده سازی تصاویر امروزه کاربردهای زیادی داره و ما به عنوان یک برنامه نویس باید بتونیم با کدنویسی چنین چیزی را پیاده سازی کنیم. دقت کنید که این کار روشهای زیادی داره و در این ویدیو و مقاله به یکی از روشها میپردازیم. در انتها کمی هم بحث پردازش تصویر داریم و در مورد فیلتر پایین گذر و Anti-Aliasing صحبت میکنیم.
قبل از خواندن مقاله، اگر علاقه دارید در مورد پایتون بیشتر بدانید، می توانید این دو مقاله مهم را بررسی کنید:
فهرست مطالب
اهمیت فشرده سازی تصویر
امروزه حدود 70 درصد از محتوای آنلاین در قالب تصویر است. بنابراین، توجه به مدت زمانی که کاربران برای مشاهده تصاویر در وب سایتها یا برنامهها باید منتظر بمانند بسیار مهم است. علاوه بر این، در شبکههای اجتماعی، مردم تعداد قابل توجهی از تصاویر را آپلود میکنند که نیاز به پردازش و بهینهسازی پیوسته دارند، در غیر این صورت حافظهی در دسترس شبکهها تمام میشود. بنابراین، فشرده سازی تصویر برای هر پلتفرم آنلاین یک وظیفه حیاتی است.
میتوانیم اهمیت فشرده سازی تصاویر را به سه بخش عمده دسته بندی کنیم: SEO، ذخیره سازی و پهنای باند. وقتی صحبت از SEO به میان میآید، به تصاویر کوچکتری نیاز است، به این معنی که وبسایتها یا برنامهها سریعتر بارگذاری میشوند و بینندگان میتوانند به سرعت از محتوا استفاده کنند، زیرا گوگل اعلام کرده است که سرعت سایت در رتبهبندی مهم است. ذخیره سازی تصاویر بهینه شده آسان تر است و هزینه عملیاتی وب سایتها یا برنامهها را کاهش میدهد. علاوه بر این، با تصاویر فشرده، وبسایتها یا برنامهها به پهنای باند کمتری نیاز دارند، به این معنی که میتوانند از فضای هاستینگ بیشترین بهره را ببرند.
نحوه فشرده سازی تصاویر با پایتون
پس از مرور دلایل فشرده سازی تصویر، وقت آن است که تمرینات عملی را انجام دهیم و بدانیم که چگونه تصاویر را با پایتون فشرده کنیم. پایتون ماژولهای زیادی برای فشرده سازی تصویر دارد. در اینجا به برخی از آنها اشاره میکنیم:
- Pillow – این کتابخانه بر روی PIL ساخته شده و میتواند برای فرمتهای روبهرو استفاده شود: PNG ،PPM ،JPEG GIF، BMP و TIFF.
- Scikit-image – Scikit-learn یک بسته یادگیری ماشینی است. بسته Scikit-image امکان دستکاری تصاویر پیشرفته را فراهم میکند و به شما امکان میدهد حتی تصاویر را به صورت آرایههای NumPy برگردانید!
- Tinify – این بسته به شما امکان میدهد به راحتی با tinypng.com برای دریافت تصاویر فشرده شده از طریق یک API اقدام کنید.
- img4web – این اسکریپت تصاویر jpg و png را برای وب بهینه میکند. پس از اجرای آن، فشرده سازی بدون اتلاف تصاویر را دریافت خواهید کرد.
برای این آموزش از ماژول Pillow برای فشرده سازی تصویر استفاده میکنیم.
ماژول Pillow را نصب کنید
اولین قدم برای بهینه سازی یک تصویر، نصب ماژول Pillow است. برای نصب Pillow به روز شده بر روی دستگاه ویندوز خود ، کد زیر را در خط فرمان یا Powershell اجرا کنید:
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow
برای کسانی که با pip آشنایی ندارند، pip یک مدیریت بسته پایتون است که به توسعه دهندگان پایتون کمک میکند تا ماژولهای پایتون را نصب، حذف و مدیریت کنند. برای نصب pip در مک یا لینوکس، روی لینکهای زیر کلیک کنید:
یک فایل تصویری را در پایتون باز کنید
در این کد باید از دو ماژول استفاده کنیم. اولی Pillow و دومی Tkinter است. Pillow یک ماژول پردازش تصویر است و Tkinter یک کتابخانه رابط کاربری گرافیکی پایتون است. ما می توانیم یک فایل تصویری را با استفاده از ماژول Tkinter باز کنیم تا از کاربر بخواهیم یک فایل تصویر دلخواه را انتخاب کند. به کد زیر توجه کنید:
from PIL import Image
from tkinter.filedialog import *
file_path = askopenfilename()
img = Image.open(file_path)
myHeight, myWidth = img.size
print(myHeight, myWidth)
- با استفاده از خط یک، “Image” را از ماژول PIL وارد میکنیم.
- در خط دو، همه چیز را از “tkinter.filedialog” وارد میکنیم.
- در خط سه از کاربر میخواهیم مسیر فایل تصویری خود را مشخص کند.
- در خط چهار این مسیر را به متد open میدهیم.
- در خط پنج، اندازه تصویر را استخراج میکنیم و ارتفاع و عرض آن را ذخیره میکنیم.
- خط شش دلخواه است. برای دیدن ابعاد تصویر از آن استفاده میکنیم.
بهینه سازی تصویر در پایتون
برای بهینه سازی حجم تصاویر، باید از روش تغییر اندازه استفاده کنید که دو پارامتر نیاز دارد. اولی که ابعاد تصویر است اجباری بوده و دومی فیلتر Anti-Aliasing است. کد زیر تصویر شما را بهینه و فشرده میکند:
img = img.resize((myHeight, myWidth), Image.ANTIALIAS)
پدیده Aliasing
در بحث پردازش تصویر، پدیده Aliasing زمانی اتفاق میافتد که فرکانسهای زیادی در تصویر وجود دارد و میخواهیم از آنها نمونه برداری کنیم. به تصویر زیر نگاه کنید:
تصویر سمت چپ به پدیده Aliasing که در اثر downsample کردن تصویر اصلی ایجاد شده است، اشاره دارد. همانطور که میبینید، برخی از الگوها به نام “Moire pattern” در تصویر سمت چپ وجود دارد. اما تصویر سمت راست هیچ کدام از این الگوها را ندارد. در واقع این تصویر بدون رخ داده پدیده Aliasing به صورت downsample درآمده است که علت آن اعمال فیلتر پایین گذر به تصویر اصلی بوده است.
Aliasing زمانی اتفاق میافتد که یک سیگنال با کمتر از دو برابر بالاترین فرکانس موجود در سیگنال نمونه برداری شود.
برای جلوگیری از “ایجاد سیگنال در فرکانسهایی” که در سیگنال اصلی وجود ندارد، باید فرکانسهای بالاتر از نصف نرخ نمونهبرداری را با استفاده از فیلتر پایینگذر، حذف کنیم. برای مطالعه بیشتر می توانید روی این لینک کلیک کنید.
ذخیره سازی تصویر خروجی
save_path = asksaveasfilename()
img.save(save_path + "_compressed.JPG")
برای ذخیره تصویر خروجی، از “asksaveasfimename” برای تعیین مسیر استفاده میکنیم، سپس با متد save آن را با نام دلخواه ذخیره میکنیم.
برنامه اصلی
import PIL
from PIL import Image
from tkinter.filedialog import *
file_path = askopenfilename()
img = Image.open(file_path)
myHeight, myWidth = img.size
print(myHeight, myWidth)
img = img.resize((myHeight, myWidth), Image.ANTIALIAS)
save_path = asksaveasfilename()
img.save(save_path + "_compressed.JPG")
نتیجه خروجی
همانطور که مشاهده میکنید، در اثر اعمال فشرده سازی توسط پایتون، تصویر سمت چپ حدود یک سوم کاهش حجم داشته است.
سخن پایانی
دوستان میکرولرنی عزیز خسته نباشید 🙂
امیدوارم که از مطالعه این مقاله و دیدن این ویدیو لذت برده باشید. دست به کد شدن و اجرا را فراموش نکنید و اگر براتون سوالی پیش اومد حتما در کامنتها بپرسید. راستی یادتون نره که کانال یوتوب ما را هم دنبال کنید.
درباره احسان عبداللهی
مدیر و موسس میکرولرن | برنامه نویسی پاسخی ظریف به یک نیاز در دنیای واقعی هست.
نوشته های بیشتر از احسان عبداللهی
دیدگاهتان را بنویسید