1. Produk
  2.   Imej
  3.   C++
  4.   OpenImageIO
 
  

Pemprosesan & Penukaran Imej melalui Open Source C++ API

Baca, Tulis & Tukar Format Imej Popular Seperti PNG, JPEG, BMP, TIFF & banyak lagi melalui Pustaka C++ Percuma.

OpenImageIO ialah perpustakaan pemprosesan imej yang berkuasa yang memberikan pembangun perisian keupayaan untuk membaca, menulis dan memproses format fail imej yang popular di dalam aplikasi C++. Ia menyediakan sokongan untuk beberapa format imej popular melalui pemalam. Ia menyediakan sokongan untuk format imej popular seperti OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF & beberapa lagi.

Perpustakaan OpenImageIO digunakan secara meluas dalam animasi dan studio VFX di seluruh dunia dan juga disepadukan ke dalam pelbagai produk komersial. Pustaka OpenImageIO dilengkapi dengan beberapa alatan imej baris perintah yang menunjukkan ciri seperti menukar format imej kepada yang lain, membandingkan dua imej, mencetak maklumat terperinci, mencari imej untuk metadata padanan, pemapar imej ringkas dan banyak lagi.

Previous Next

Bermula dengan OpenImageIO

Sistem binaan OpenImageIO adalah berdasarkan CMake. Jika perlu memasangnya pada sistem anda. Selepas anda membina OpenImageIO, jika anda menyusun dengan bendera EMBEDPLUGINS=0 anda perlu menetapkan pembolehubah persekitaran OIIO_LIBRARY_PATH untuk menunjuk ke direktori 'lib' di mana OpenImageIO dipasang, atau ia tidak akan dapat mencari pemalam.

Pasang OpenImageIO melalui arahan git

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

Membaca dan Menulis imej melalui C++ API

Pustaka OpenImageIO membolehkan pengaturcara membaca & menulis imej serta mengawal cara imej kemudiannya akan dihasilkan secara luaran dalam output. Biasanya, semua imej yang dibaca oleh pustaka dibaca ke dalam ImageBuf yang disokong oleh ImageCache asas, dan secara automatik ditukar kepada piksel terapung untuk storan dalaman. Semasa menulis imej, ia hanya mengeluarkan imej semasa ke fail bernama. Pustaka pemprosesan imej tidak mengalih keluar imej sekarang daripada timbunan imej; ia hanya menyimpan salinannya.

Pembacaan Imej Lanjutan melalui 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;
}

Menukar Imej kepada Format lain

Pustaka OpenImageIO menyediakan ciri untuk menukar imej kepada format fail popular yang lain. Ia sangat mudah untuk menukar antara format imej yang disokong. Utiliti iconvert akan membaca imej dan kemudian menulis imej ke format fail yang disokong baharu. Ia hanya akan menyimpulkan format fail daripada sambungan fail. Anda boleh memasukkan kapsyen imej, perihalan, kata kunci atau metadata.

Tukar Metadata Imej melalui C++

OpenImageIO API membolehkan pembangun perisian menukar metadata imej semasa di dalam aplikasi C++ mereka sendiri melalui API sumber terbuka. Ia menyediakan arahan yang mengubah suai metadata imej sedia ada, tetapi tidak mengubah nilai pikselnya. Perkara yang baik ialah hanya imej semasa (imej di bahagian atas timbunan) terjejas, tetapi tidak di bawah timbunan. Anda juga boleh menambah atau mengosongkan kata kunci, menambah kapsyen atau perihalan, Mengalih keluar sebarang metadata dan banyak lagi.

Cara Menetapkan Metadata Imej melalui 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

Lukis Bentuk atau Teks pada Imej melalui C++ API

Ia sentiasa sangat berguna untuk melabelkan imej anda dengan tajuk yang berguna atau tanda air imej untuk melindunginya daripada penggunaan yang tidak dibenarkan. Pustaka OpenImageIO sumber terbuka telah memasukkan beberapa ciri penting untuk melukis bentuk, titik, garisan, kotak atau teks di atas imej dengan mudah. Anda boleh melukis bentuk pada imej anda atau menambah teks padanya dengan hanya beberapa baris kod. Contoh kod berikut menunjukkan cara melukis teks pada imej dan menjajarkannya.

Cara Melukis Teks di Atas Imej melalui API C++

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);
 Melayu