1. Produkti
  2.   Attēls
  3.   C++
  4.   OpenImageIO
 
  

Attēlu apstrāde un konvertēšana, izmantojot atvērtā pirmkoda C++ API

Lasiet, rakstiet un konvertējiet populārus attēlu formātus, piemēram, PNG, JPEG, BMP, TIFF un daudz ko citu, izmantojot bezmaksas C++ bibliotēku.

OpenImageIO ir jaudīga attēlu apstrādes bibliotēka, kas programmatūras izstrādātājiem sniedz iespēju lasīt, rakstīt un apstrādāt populārus attēlu failu formātus C++ lietojumprogrammās. Tas nodrošina atbalstu vairākiem populāriem attēlu formātiem, izmantojot spraudņus. Tas nodrošina atbalstu populāriem attēlu formātiem, piemēram, OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF un vairākiem citiem.

OpenImageIO bibliotēka tiek plaši izmantota animācijas un VFX studijās visā pasaulē, kā arī ir integrēta daudzos komerciālos produktos. OpenImageIO bibliotēkā ir vairāki komandrindas attēlu rīki, kas demonstrē tādas funkcijas kā attēlu formātu konvertēšana uz citiem, divu attēlu salīdzināšana, detalizētas informācijas drukāšana, attēlu atbilstības metadatu meklēšana, vienkāršs attēlu skatītājs un citas.

Previous Next

Darba sākšana ar OpenImageIO

OpenImageIO veidošanas sistēma ir balstīta uz CMake. Ja nepieciešams to instalēt savā sistēmā. Pēc OpenImageIO izveides, ja kompilējāt ar karogu EMBEDPLUGINS=0, vides mainīgajam OIIO_LIBRARY_PATH būs jāiestata tā, lai tas norādītu uz lib direktoriju, kurā ir instalēts OpenImageIO, pretējā gadījumā tas nevarēs atrast spraudņus.

Instalējiet OpenImageIO, izmantojot git komandu

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

Attēlu lasīšana un rakstīšana, izmantojot C++ API

OpenImageIO bibliotēka ļauj programmētājiem lasīt un rakstīt attēlus, kā arī kontrolēt veidu, kā vēlāk attēli tiks ārēji izveidoti izvadē. Parasti visi bibliotēkas lasītie attēli tiek nolasīti ImageBuf failā, ko nodrošina pamatā esošā ImageCache, un tiek automātiski pārveidoti par peldošajiem pikseļiem iekšējai glabāšanai. Rakstot attēlus, tas tikai izvada pašreizējo attēlu nosauktajā failā. Attēlu apstrādes bibliotēka neizņem pašreizējo attēlu no attēlu kaudzes; tas vienkārši saglabā tā kopiju.

Uzlabota attēlu lasīšana, izmantojot 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;
}

Attēla konvertēšana citos formātos

OpenImageIO bibliotēka nodrošina līdzekļus attēlu konvertēšanai citos populāros failu formātos. To ir ļoti viegli konvertēt starp atbalstītajiem attēlu formātiem. Utilīta iconvert nolasīs attēlu un pēc tam ierakstīs attēlu jaunā atbalstītā faila formātā. Tas vienkārši secinās faila formātu no faila paplašinājuma. Varat iekļaut attēla parakstu, aprakstu, atslēgvārdus vai metadatus.

Mainiet attēla metadatus, izmantojot C++

OpenImageIO API ļauj programmatūras izstrādātājiem mainīt pašreizējos attēla metadatus savās C++ lietojumprogrammās, izmantojot atvērtā pirmkoda API. Tas nodrošina komandas, kas modificē esošā attēla metadatus, bet nemaina tā pikseļu vērtības. Labā lieta ir tā, ka tiek ietekmēts tikai pašreizējais attēls (attēls kaudzes augšpusē), bet ne zemāks. Varat arī pievienot vai notīrīt atslēgvārdus, pievienot parakstus vai aprakstu, noņemt visus metadatus un veikt citas darbības.

Kā iestatīt attēla metadatus, izmantojot 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

Zīmējiet formas vai tekstu virs attēliem, izmantojot C++ API

Vienmēr ir ļoti noderīgi apzīmēt attēlus ar noderīgiem nosaukumiem vai apzīmēt attēlu ar ūdenszīmi, lai pasargātu tos no nesankcionētas izmantošanas. Atvērtā koda OpenImageIO bibliotēkā ir iekļautas vairākas svarīgas funkcijas, kas ļauj viegli zīmēt formas, punktus, līnijas, lodziņus vai tekstu virs attēliem. Varat zīmēt formas virs attēla vai pievienot tam tekstu, izmantojot tikai dažas koda rindiņas. Šie koda piemēri parāda, kā zīmēt tekstu virs attēla un līdzināt to.

Kā zīmēt tekstu virs attēla, izmantojot 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);
 Latviski