প্রকল্প সম্পর্কে

pyvips হলো libvips ইমেজ প্রসেসিং লাইব্রেরির একটি Python বাইন্ডিং, যা cffi দিয়ে বাস্তবায়িত। এটি libvips-কে মোড়ক করে যাতে Python প্রোগ্রাম তার অপারেশনগুলো ব্যবহার করতে পারে, এবং এটি Windows, macOS ও Linux-এ python3 ও pypy3-এর অধীনে লিক ছাড়াই vips টেস্ট স্যুট পাস করে। এটি কীভাবে কাজ করে pyvips ব্যবহার করা প্রোগ্রাম সরাসরি ইমেজ পরিবর্তন করে না। বরং তারা একটি সোর্স ইমেজের উপর নির্মিত ইমেজ প্রসেসিং অপারেশনের পাইপলাইন তৈরি করে। যখন পাইপের শেষ প্রান্ত একটি গন্তব্যের সাথে সংযুক্ত হয়, তখন পুরো পাইপলাইন একসাথে কার্যকর হয়, সোর্স থেকে গন্তব্যে একবারে একটি অংশ করে সমান্তরালে ইমেজ স্ট্রিম করে। যেহেতু এটি সমান্তরাল, তাই এটি দ্রুত, এবং যেহেতু এটি সম্পূর্ণ ইমেজ মেমরিতে রাখার প্রয়োজন নেই, তাই এটি হালকা। README-তে libvips-এর গতি ও মেমরি বেঞ্চমার্ক উল্লেখ করা হয়েছে, যেখানে একটি বড় TIFF লোড করে, ১০% ছোট করে, শার্পেন করে আবার সংরক্ষণ করার একটি পরীক্ষা সাধারণত ImageMagick-এর চেয়ে প্রায় ৩ গুণ দ্রুত এবং প্রায় ৫ গুণ কম মেমরি প্রয়োজন। ইনস্টলেশন দ্রুততম উপায় হলো বাইনারি প্যাকেজ: pip install "pyvips[binary]"। এটি সবচেয়ে বেশি প্রয়োজনীয় লাইব্রেরিসহ একটি স্বয়ংসম্পূর্ণ প্যাকেজ ইনস্টল করে এবং বেশিরভাগ প্ল্যাটফর্মে কাজ করা উচিত, যার মধ্যে Linux, Windows ও macOS, ৬৪ ও ৩২ বিট x64 এবং ARM CPU সহ। বান্ডল করা libvips-এ PDF লোড ও OpenSlide সমর্থনের মতো বৈশিষ্ট্য নেই। বিকল্পভাবে, libvips আলাদাভাবে ইনস্টল করুন। আপনার লাইব্রেরি সার্চ পাথে libvips শেয়ার্ড লাইব্রেরি থাকতে হবে, সংস্করণ 8.2 বা তার পরের, যদিও সব বৈশিষ্ট্যের জন্য কমপক্ষে 8.9 প্রয়োজন। উদাহরণস্বরূপ, Linux-এ apt install libvips-dev তারপর pip install pyvips; Python 3.11 ও তার পরের সংস্করণে প্রথমে একটি venv প্রয়োজন। Homebrew সহ macOS-এ: brew install vips python pkg-config, তারপর pip install pyvips। Windows-এ, libvips ওয়েবসাইট থেকে একটি প্রি-কম্পাইল করা বাইনারি ডাউনলোড করুন, ৬৪-বিট Python ব্যবহার করুন, এবং হয় vips-dev-x.y\bin PATH-এ যোগ করুন অথবা প্রোগ্রামের ভেতর থেকে PATH সেট করুন (Python 3.8+ এ os.add_dll_directory ব্যবহার করে)। Conda প্যাকেজে একটি মিলে যাওয়া libvips বাইনারি অন্তর্ভুক্ত: conda install --channel conda-forge pyvips। বিল্ড মোড যদি libvips-এর ডেভেলপমেন্ট হেডার ইনস্টল করা থাকে এবং একটি কার্যকর C কম্পাইলার পাওয়া যায়, তাহলে মডিউলটি আপনার Python-এর জন্য একটি libvips বাইনারি এক্সটেনশন বিল্ড করতে cffi API মোড ব্যবহার করে। যদি এটি একটি বাইনারি এক্সটেনশন বিল্ড করতে না পারে, তাহলে এটি cffi ABI মোডে ফিরে যায়, যার শুধু libvips শেয়ার্ড লাইব্রেরি প্রয়োজন; এটি চালু হতে বেশি সময় নেয় এবং সাধারণত কার্যকর করতে প্রায় ২০% ধীর। API মোড ব্যবহৃত হচ্ছে কিনা তা pyvips.API_mode দিয়ে পরীক্ষা করা যায়। উদাহরণ একটি নমুনা প্রোগ্রাম সিকোয়েন্সিয়াল অ্যাক্সেস দিয়ে একটি JPG লোড করে, প্রতিটি সবুজ পিক্সেলের মান দুই দিয়ে গুণ করে (image *= [1, 2, 1]), একটি কনভোলিউশন মাস্ক দিয়ে শার্পেন করে, এবং ইমেজটি আবার ফাইলসিস্টেমে লেখে। ডেভেলপমেন্ট নোট README-তে স্থানীয় এডিটেবল ইনস্টল, tox দিয়ে সব টেস্ট চালানো, pytest দিয়ে টেস্ট স্যুট বা একটি নির্দিষ্ট টেস্ট চালানো, পারফরম্যান্স টেস্ট চালানো, flake8 দিয়ে স্টাইল চেকিং, এবং sphinx-build দিয়ে HTML ডক্স তৈরি করার কমান্ড তালিকাভুক্ত করা হয়েছে। টাইপ হিন্ট PEP 561 স্টাব ফাইল (pyvips/__init__.pyi) এর মাধ্যমে প্রদান করা হয়, mypy-এর সাথে ব্যবহারযোগ্য, যদিও মেথডগুলো libvips অপশনের জন্য ইচ্ছামতো কীওয়ার্ড আর্গুমেন্ট গ্রহণ করে যা হিন্টে সম্পূর্ণভাবে কভার নাও হতে পারে। রক্ষণাবেক্ষণের কাজের মধ্যে রয়েছে libvips GIR থেকে enums পুনরুত্পাদন, টাইপ স্টাব পুনরুত্পাদন, autodocs পুনরুত্পাদন, সংস্করণ নম্বর আপডেট, এবং PyPI প্যাকেজ বিল্ড ও আপলোড।