Bildbehandling och konvertering via Open Source C++ API
Läs, skriv och konvertera populära bildformat som PNG, JPEG, BMP, TIFF och många fler via gratis C++-bibliotek.
OpenImageIO är ett kraftfullt bildbehandlingsbibliotek som ger mjukvaruutvecklare möjligheten att läsa, skriva och bearbeta populära bildfilformat i C++-applikationer. Det ger stöd för flera populära bildformat genom plugins. Det ger stöd för populära bildformat som OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF och flera fler.
OpenImageIO-biblioteket används i stor utsträckning i animations- och VFX-studior över hela världen och är också integrerat i många kommersiella produkter. OpenImageIO-biblioteket kommer med flera kommandoradsbildverktyg som visar funktioner som att konvertera bildformat till andra, jämföra två bilder, skriva ut detaljerad information, söka efter bilder efter matchande metadata, enkel bildvisare och mer.
Komma igång med OpenImageIO
OpenImageIO byggsystem är baserat på CMake. Om du behöver installera det på ditt system. Efter att du byggt OpenImageIO, om du kompilerade med EMBEDPLUGINS=0-flaggan måste du ställa in miljövariabeln OIIO_LIBRARY_PATH för att peka på 'lib'-katalogen där OpenImageIO är installerad, annars kommer den inte att kunna hitta plugin-program.
Installera OpenImageIO via git-kommandot
git clone https://github.com/OpenImageIO/oiio.git
Läsa och skriva bilder via C++ API
OpenImageIO-biblioteket tillåter programmerare att läsa och skriva bilder samt styra hur senare bilder kommer att produceras externt i utgången. Normalt läses alla bilder som läses av biblioteket in i en ImageBuf med stöd av en underliggande ImageCache, och konverteras automatiskt till flytande pixlar för inre lagring. När du skriver bilder matar den bara ut den aktuella bilden till den namngivna filen. Bildbehandlingsbiblioteket tar inte bort den aktuella bilden från bildstapeln; den sparar helt enkelt en kopia av den.
Avancerad bildlä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;
}
Konvertera bild till andra format
OpenImageIO-biblioteket tillhandahåller funktioner för att konvertera bilder till andra populära filformat. Det är mycket lätt att konvertera mellan stödda bildformat. Verktyget iconvert kommer att läsa en bild och sedan skriva bilden till ett nytt filformat som stöds. Det kommer helt enkelt att härleda filformatet från filtillägget. Du kan inkludera en bildtext, beskrivning, nyckelord eller metadata.
Ändra bildmetadata via C++
OpenImageIO API gör det möjligt för mjukvaruutvecklare att ändra aktuell bildmetadata i sina egna C++-applikationer via API med öppen källkod. Den tillhandahåller kommandon som ändrar metadata för den befintliga bilden, men som inte ändrar dess pixelvärden. Det som är bra är att bara den aktuella bilden (bilden högst upp i stapeln) påverkas, men inte ner i högen. Du kan också lägga till eller rensa nyckelord, lägga till bildtext eller beskrivning, tar bort all metadata och mer.
Hur man ställer in bildmetadata 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
Rita formar eller text över bilder via C++ API
Det är alltid mycket användbart att märka dina bilder med användbara titlar eller vattenstämpel bilden för att skydda dem från obehörig användning. OpenImageIO-biblioteket har inkluderat flera viktiga funktioner för att rita former, punkter, linjer, lådor eller text över bilderna med lätthet. Du kan rita former över din bild eller lägga till text till den med bara ett par rader kod. Följande kodexemplar visar hur man ritar text över en bild och anpassar den.
Hur man ritar text över bild 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);