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

Billedbehandling og konvertering via Open Source C++ API

Læs, skriv og konverter populære billedformater som PNG, JPEG, BMP, TIFF og mange flere via gratis C++ bibliotek.

OpenImageIO er et kraftfuldt billedbehandlingsbibliotek, der giver softwareudviklere mulighed for at læse, skrive og behandle populære billedfilformater i C++-applikationer. Det giver understøttelse af flere populære billedformater gennem plugins. Det understøtter populære billedformater som OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF og flere flere.

OpenImageIO-biblioteket er meget udbredt i animations- og VFX-studier over hele verden og er også integreret i adskillige kommercielle produkter. OpenImageIO-biblioteket leveres med flere kommandolinje-billedværktøjer, der demonstrerer funktioner som at konvertere billedformater til andre, sammenligne to billeder, udskrive detaljerede oplysninger, søge billeder efter matchende metadata, simpel billedfremviser og mere.

Previous Next

Kom godt i gang med OpenImageIO

OpenImageIO byggesystem er baseret på CMake. Hvis det er nødvendigt at installere det på dit system. Når du har bygget OpenImageIO, hvis du kompilerede med EMBEDPLUGINS=0-flaget, skal du indstille miljøvariablen OIIO_LIBRARY_PATH til at pege på 'lib'-mappen, hvor OpenImageIO er installeret, ellers vil den ikke være i stand til at finde plugins.

Installer OpenImageIO via git-kommando

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

Læsning og skrivning af billeder via C++ API

OpenImageIO-biblioteket giver programmører mulighed for at læse og skrive billeder samt kontrollere, hvordan senere billeder vil blive produceret eksternt i outputtet. Normalt bliver alle billeder, der læses af biblioteket, læst ind i en ImageBuf understøttet af en underliggende ImageCache, og konverteres automatisk til float-pixel til indre lagring. Mens du skriver billeder, udsender den bare det aktuelle billede til den navngivne fil. Billedbehandlingsbiblioteket fjerner ikke det aktuelle billede fra billedstakken; den gemmer simpelthen en kopi af den.

Avanceret billedlæsning 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 af billede til andre formater

OpenImageIO-biblioteket giver funktioner til at konvertere billeder til andre populære filformater. Det er meget nemt at konvertere mellem understøttede billedformater. Iconvert-værktøjet vil læse et billede og derefter skrive billedet til et nyt understøttet filformat. Det vil simpelthen udlede filformatet fra filtypenavnet. Du kan inkludere en billedtekst, beskrivelse, nøgleord eller metadata.

Skift billedmetadata via C++

OpenImageIO API gør det muligt for softwareudviklere at ændre aktuelle billedmetadata i deres egne C++ applikationer via open source API. Det giver kommandoer, der ændrer metadataene for det eksisterende billede, men som ikke ændrer dets pixelværdier. Det gode er, at kun det aktuelle billede (billedet i toppen af stakken) er påvirket, men ikke nede i stakken. Du kan også tilføje eller rydde søgeord, tilføje billedtekst eller beskrivelse, Fjerner alle metadata og mere.

Sådan indstilles billedmetadata 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 figurer eller tekst over billeder via C++ API

Det er altid meget nyttigt at mærke dine billeder med nyttige titler eller vandmærke billedet for at beskytte dem mod uautoriseret brug. Open-source OpenImageIO-biblioteket har inkluderet flere vigtige funktioner til let at tegne figurer, punkter, linjer, bokse eller tekst over billederne. Du kan tegne figurer over dit billede eller tilføje tekst til det med blot et par linjer kode. Følgende kodeeksempler viser, hvordan man tegner tekst over et billede og justerer det.

Sådan tegner du tekst over billede 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);
 Dansk