1. পণ্য
  2.   ছবি
  3.   C++
  4.   OpenImageIO
 
  

ওপেন সোর্স C++ API এর মাধ্যমে ছবি প্রক্রিয়াকরণ ও রূপান্তর

বিনামূল্যে C++ লাইব্রেরির মাধ্যমে PNG, JPEG, BMP, TIFF এবং আরও অনেক কিছুর মতো জনপ্রিয় চিত্র বিন্যাস পড়ুন, লিখুন এবং রূপান্তর করুন।

OpenImageIO হল একটি শক্তিশালী ইমেজ প্রসেসিং লাইব্রেরি যা সফটওয়্যার ডেভেলপারদের C++ অ্যাপ্লিকেশনের মধ্যে জনপ্রিয় ইমেজ ফাইল ফরম্যাট পড়তে, লিখতে এবং প্রক্রিয়া করার ক্ষমতা দেয়। এটি প্লাগইনগুলির মাধ্যমে বেশ কয়েকটি জনপ্রিয় চিত্র বিন্যাসের জন্য সমর্থন প্রদান করে। এটি OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF এবং আরও অনেক কিছুর মত জনপ্রিয় ইমেজ ফরম্যাটের জন্য সমর্থন প্রদান করে।

OpenImageIO লাইব্রেরি সারা বিশ্বে অ্যানিমেশন এবং ভিএফএক্স স্টুডিওতে ব্যাপকভাবে ব্যবহৃত হয় এবং এটি অসংখ্য বাণিজ্যিক পণ্যের সাথে একত্রিত হয়। OpenImageIO লাইব্রেরি বেশ কিছু কমান্ড-লাইন ইমেজ টুলের সাথে আসে যা অন্যের সাথে ইমেজ ফরম্যাট কনভার্ট করা, দুটি ইমেজ তুলনা করা, বিশদ তথ্য মুদ্রণ করা, ম্যাচ মেটাডেটার জন্য ইমেজ সার্চ করা, সিম্পল ইমেজ ভিউয়ার এবং আরও অনেক কিছুর মতো বৈশিষ্ট্য দেখায়।

Previous Next

OpenImageIO দিয়ে শুরু করা

OpenImageIO বিল্ড সিস্টেম CMake উপর ভিত্তি করে। আপনার সিস্টেমে এটি ইনস্টল করার প্রয়োজন হলে. আপনি OpenImageIO তৈরি করার পরে, যদি আপনি EMBEDPLUGINS=0 পতাকা দিয়ে কম্পাইল করেন তাহলে আপনাকে 'lib' ডিরেক্টরিতে নির্দেশ করতে পরিবেশ পরিবর্তনশীল OIIO_LIBRARY_PATH সেট করতে হবে যেখানে OpenImageIO ইনস্টল করা আছে, অন্যথায় এটি প্লাগইনগুলি খুঁজে পাবে না।

Git কমান্ডের মাধ্যমে OpenImageIO ইনস্টল করুন

 git clone https://github.com/OpenImageIO/oiio.git 

C++ API এর মাধ্যমে ছবি পড়া এবং লেখা

OpenImageIO লাইব্রেরি প্রোগ্রামারদের ইমেজ পড়তে এবং লিখতে এবং সেইসাথে যেভাবে পরবর্তী ছবিগুলি আউটপুটে বাহ্যিকভাবে উত্পাদিত হবে তা নিয়ন্ত্রণ করতে দেয়। সাধারণত, লাইব্রেরি দ্বারা পঠিত সমস্ত চিত্র একটি অন্তর্নিহিত ImageCache দ্বারা সমর্থিত একটি ImageBuf-এ পড়া হয় এবং অভ্যন্তরীণ স্টোরেজের জন্য স্বয়ংক্রিয়ভাবে ফ্লোট পিক্সেলে রূপান্তরিত হয়। ইমেজ লেখার সময়, এটি শুধুমাত্র বর্তমান ইমেজটিকে নামযুক্ত ফাইলে আউটপুট করে। ইমেজ প্রসেসিং লাইব্রেরি বর্তমান ইমেজটিকে ইমেজ স্ট্যাক থেকে সরিয়ে দেয় না; এটি কেবল এটির একটি অনুলিপি সংরক্ষণ করে।

C++ API< এর মাধ্যমে উন্নত ছবি রিডিং

#include 
using namespace OIIO;
...
const char *filename = "foo.jpg";
auto inp = ImageInput::open (filename);
if (! inp) {
    std::cerr << "Could not open " << filename
              << ", error = " << OIIO::geterror() << "\n";
    return;
}
const ImageSpec &spec = inp->spec();
int xres = spec.width;
int yres = spec.height;
int channels = spec.nchannels;
std::vector pixels(xres * yres * channels);
if (! inp->read_image (TypeDesc::UINT8, &pixels[0])) {
    std::cerr << "Could not read pixels from " << filename
              << ", error = " << inp->geterror() << "\n";
    return;
}
if (! inp->close ()) {
    std::cerr << "Error closing " << filename
              << ", error = " << inp->geterror() << "\n";
    return;
}

ছবিকে অন্য ফরম্যাটে রূপান্তর করা হচ্ছে

OpenImageIO লাইব্রেরি অন্যান্য জনপ্রিয় ফাইল ফরম্যাটে ছবি রূপান্তর করার জন্য বৈশিষ্ট্য প্রদান করে। সমর্থিত ইমেজ ফরম্যাটের মধ্যে কনভার্ট করা খুবই সহজ। আইকনভার্ট ইউটিলিটি একটি চিত্র পড়বে এবং তারপর একটি নতুন সমর্থিত ফাইল বিন্যাসে ছবিটি লিখবে। এটি কেবল ফাইল এক্সটেনশন থেকে ফাইল বিন্যাস অনুমান করবে। আপনি একটি ছবির ক্যাপশন, বিবরণ, কীওয়ার্ড বা মেটাডেটা অন্তর্ভুক্ত করতে পারেন।

C++ এর মাধ্যমে ইমেজ মেটাডেটা পরিবর্তন করুন

OpenImageIO API সফ্টওয়্যার ডেভেলপারদের ওপেন সোর্স API এর মাধ্যমে তাদের নিজস্ব C++ অ্যাপ্লিকেশনের মধ্যে বর্তমান ইমেজ মেটাডেটা পরিবর্তন করতে সক্ষম করে। এটি এমন কমান্ড প্রদান করে যা বিদ্যমান চিত্রের মেটাডেটা পরিবর্তন করে, কিন্তু এর পিক্সেল মান পরিবর্তন করে না। ভাল জিনিস হল যে শুধুমাত্র বর্তমান ইমেজ (স্ট্যাকের উপরের ছবিটি) প্রভাবিত হয়, কিন্তু স্ট্যাকের নিচে নয়। এছাড়াও আপনি কীওয়ার্ড যোগ বা সাফ করতে পারেন, ক্যাপশন বা বিবরণ যোগ করতে পারেন, যেকোনো মেটাডেটা মুছে ফেলতে পারেন এবং আরও অনেক কিছু করতে পারেন।

কিভাবে C++ এর মাধ্যমে ইমেজ মেটাডেটা সেট করবেন

// spec["key"] = value  sets the value of the metadata, using
// the type of value as a guide for the type of the metadata.
spec["Orientation"] = 1;   // int
spec["PixelAspectRatio"] = 1.0f;   // float
spec["ImageDescription"] = "selfie";  // string
spec["worldtocamera"] = Imath::M44f(...)  // matrix

C++ API এর মাধ্যমে চিত্রের উপর আকার বা পাঠ্য আঁকুন

অননুমোদিত ব্যবহার থেকে রক্ষা করার জন্য আপনার ছবিগুলিকে দরকারী শিরোনাম দিয়ে লেবেল করা বা ছবিটিকে জলছাপ করা সর্বদা খুব দরকারী। ওপেন সোর্স OpenImageIO লাইব্রেরিতে আকৃতি, পয়েন্ট, লাইন, বাক্স বা টেক্সট ছবি আঁকার জন্য বেশ কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে। আপনি আপনার চিত্রের উপর আকার আঁকতে পারেন বা কোডের মাত্র কয়েকটি লাইন দিয়ে এতে পাঠ্য যোগ করতে পারেন। নিম্নলিখিত কোড উদাহরণগুলি দেখায় কিভাবে একটি চিত্রের উপর পাঠ্য আঁকতে হয় এবং এটিকে সারিবদ্ধ করতে হয়।

কিভাবে C++ API এর মাধ্যমে ইমেজের উপর টেক্সট আঁকবেন

ImageBufAlgo::render_text (ImgA, 50, 100, "Hello, world");
float red[] = { 1, 0, 0, 1 };
ImageBufAlgo::render_text (ImgA, 100, 200, "Go Big Red!",
                           60, "Arial Bold", red);
float white[] = { 1, 1, 1, 1 };
ImageBufAlgo::render_text (ImgB, 320, 240, "Centered",
                           60, "Arial Bold", white,
                           TextAlignX::Center, TextAlignY::Center);
 বাংলা