1. Tuotteet
  2.   Kuva
  3.   C++
  4.   OpenImageIO
 
  

Kuvankäsittely ja muuntaminen avoimen lähdekoodin C++ API:n kautta

Lue, kirjoita ja muunna suosittuja kuvamuotoja, kuten PNG, JPEG, BMP, TIFF ja monia muita maksuttoman C++-kirjaston kautta.

OpenImageIO on tehokas kuvankäsittelykirjasto, joka antaa ohjelmistokehittäjille mahdollisuuden lukea, kirjoittaa ja käsitellä suosittuja kuvatiedostomuotoja C++-sovelluksissa. Se tukee useita suosittuja kuvamuotoja laajennusten kautta. Se tukee suosittuja kuvaformaatteja, kuten OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF ja monia muita.

OpenImageIO-kirjastoa käytetään laajasti animaatioissa ja VFX-studioissa kaikkialla maailmassa, ja se on myös integroitu lukuisiin kaupallisiin tuotteisiin. OpenImageIO-kirjastossa on useita komentorivikuvatyökaluja, jotka esittelevät ominaisuuksia, kuten kuvamuotojen muuntamista muihin, kahden kuvan vertailemista, yksityiskohtaisten tietojen tulostamista, kuvien hakua vastaavuuden metatietojen hakemiseen, yksinkertaista kuvankatseluohjelmaa ja paljon muuta.

Previous Next

OpenImageIO:n käytön aloittaminen

OpenImageIO-koontijärjestelmä perustuu CMakeen. Jos se on asennettava järjestelmääsi. Kun olet rakentanut OpenImageIO:n, jos käänsit EMBEDPLUGINS=0-lipulla, sinun on asetettava ympäristömuuttuja OIIO_LIBRARY_PATH osoittamaan 'lib'-hakemistoon, johon OpenImageIO on asennettu, tai muuten se ei löydä laajennuksia.

Asenna OpenImageIO git-komennolla

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

Kuvien lukeminen ja kirjoittaminen C++ API:n kautta

OpenImageIO-kirjaston avulla ohjelmoijat voivat lukea ja kirjoittaa kuvia sekä hallita tapaa, jolla myöhemmät kuvat tuotetaan ulkoisesti ulostuloon. Normaalisti kaikki kirjaston lukemat kuvat luetaan ImageBufiin, jota tukee alla oleva ImageCache, ja ne muunnetaan automaattisesti kelluviksi pikseleiksi sisäistä tallennusta varten. Kuvia kirjoitettaessa se vain tulostaa nykyisen kuvan nimettyyn tiedostoon. Kuvankäsittelykirjasto ei poista nykyistä kuvaa kuvapinosta; se yksinkertaisesti tallentaa kopion siitä.

Edistynyt kuvien lukeminen C++ API:n kautta<

#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;
}

Kuvan muuntaminen muihin muotoihin

OpenImageIO-kirjasto tarjoaa ominaisuuksia kuvien muuntamiseen muihin suosittuihin tiedostomuotoihin. Se on erittäin helppo muuntaa tuettujen kuvamuotojen välillä. Iconvert-apuohjelma lukee kuvan ja kirjoittaa sen sitten uuteen tuettuun tiedostomuotoon. Se yksinkertaisesti päättelee tiedostomuodon tiedostopäätteestä. Voit sisällyttää kuvan kuvatekstin, kuvauksen, avainsanat tai metatiedot.

Muuta kuvan metatietoja C++:lla

OpenImageIO API:n avulla ohjelmistokehittäjät voivat muuttaa nykyisiä kuvien metatietoja omissa C++ -sovelluksissaan avoimen lähdekoodin API:n kautta. Se tarjoaa komentoja, jotka muokkaavat olemassa olevan kuvan metatietoja, mutta eivät muuta sen pikseliarvoja. Hyvä asia on, että tämä vaikuttaa vain nykyiseen kuvaan (kuva pinon yläosassa), mutta ei pinon alapuolella. Voit myös lisätä tai tyhjentää avainsanoja, lisätä kuvatekstin tai kuvauksen, poistaa kaikki metatiedot ja paljon muuta.

Kuvan metatietojen asettaminen C++:n kautta

// 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

Piirrä muotoja tai tekstiä kuvien päälle C++ API:n kautta

On aina erittäin hyödyllistä merkitä kuviasi hyödyllisillä otsikoilla tai vesileimalla suojellaksesi niitä luvattomalta käytöltä. Avoimen lähdekoodin OpenImageIO-kirjastossa on useita tärkeitä ominaisuuksia, joiden avulla voit helposti piirtää kuvien päälle muotoja, pisteitä, viivoja, laatikoita tai tekstiä. Voit piirtää kuvan päälle muotoja tai lisätä siihen tekstiä muutamalla koodirivillä. Seuraavat koodiesimerkit näyttävät, kuinka tekstiä piirretään kuvan päälle ja tasataan.

Tekstin piirtäminen kuvan päälle C++ API:n kautta

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