1. Produkter
  2.   Bilde
  3.   C++
  4.   OpenImageIO
 
  

Bildebehandling og konvertering via Open Source C++ API

Les, skriv og konverter populære bildeformater som PNG, JPEG, BMP, TIFF og mange flere via gratis C++-bibliotek.

OpenImageIO er et kraftig bildebehandlingsbibliotek som gir programvareutviklere muligheten til å lese, skrive og behandle populære bildefilformater i C++-applikasjoner. Den gir støtte for flere populære bildeformater gjennom plugins. Den gir støtte for populære bildeformater som OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF og flere.

OpenImageIO-biblioteket er mye brukt i animasjons- og VFX-studioer over hele verden og er også integrert i en rekke kommersielle produkter. OpenImageIO-biblioteket kommer med flere kommandolinjebildeverktøy som demonstrerer funksjoner som å konvertere bildeformater til andre, sammenligne to bilder, skrive ut detaljert informasjon, søke bilder etter samsvarende metadata, enkel bildeviser og mer.

Previous Next

Komme i gang med OpenImageIO

OpenImageIO byggesystem er basert på CMake. Hvis du trenger å installere det på systemet ditt. Etter at du har bygget OpenImageIO, hvis du kompilerte med EMBEDPLUGINS=0-flagget, må du sette miljøvariabelen OIIO_LIBRARY_PATH til å peke til 'lib'-katalogen der OpenImageIO er installert, ellers vil den ikke kunne finne pluginene.

Installer OpenImageIO via git-kommando

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

Lese og skrive bilder via C++ API

OpenImageIO-biblioteket lar programmerere lese og skrive bilder samt kontrollere måten senere bilder skal produseres eksternt i utdataene. Normalt leses alle bilder som leses av biblioteket inn i en ImageBuf støttet av en underliggende ImageCache, og blir automatisk konvertert til flytende piksler for indre lagring. Mens du skriver bilder, sender den bare det gjeldende bildet til den navngitte filen. Bildebehandlingsbiblioteket fjerner ikke det nåværende bildet fra bildestabelen; den lagrer ganske enkelt en kopi av den.

Avansert bildelesing via 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;
}

Konvertering av bilde til andre formater

OpenImageIO-biblioteket gir funksjoner for å konvertere bilder til andre populære filformater. Det er veldig enkelt å konvertere mellom støttede bildeformater. Iconvert-verktøyet vil lese et bilde og deretter skrive bildet til et nytt støttet filformat. Det vil ganske enkelt utlede filformatet fra filtypen. Du kan inkludere en bildetekst, beskrivelse, nøkkelord eller metadata.

Endre bildemetadata via C++

OpenImageIO API gjør det mulig for programvareutviklere å endre gjeldende bildemetadata i sine egne C++-applikasjoner via åpen kildekode API. Den gir kommandoer som endrer metadataene til det eksisterende bildet, men som ikke endrer pikselverdiene. Det som er bra er at bare det gjeldende bildet (bildet øverst i stabelen) påvirkes, men ikke ned i stabelen. Du kan også legge til eller slette søkeord, legge til bildetekst eller beskrivelse, fjerner alle metadata og mer.

Hvordan sette bildemetadata via 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

Tegn former eller tekst over bilder via C++ API

Det er alltid veldig nyttig å merke bildene dine med nyttige titler eller vannmerke bildet for å beskytte dem mot uautorisert bruk. Open-source OpenImageIO-biblioteket har inkludert flere viktige funksjoner for å enkelt tegne figurer, punkter, linjer, bokser eller tekst over bildene. Du kan tegne figurer over bildet ditt eller legge til tekst til det med bare et par linjer med kode. Følgende kodeeksempler viser hvordan du tegner tekst over et bilde og justerer det.

Hvordan tegne tekst over bilde via 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);
 Norsk