Traitement et conversion d'images via l'API Open Source C++
Lisez, écrivez et convertissez des formats d'image populaires tels que PNG, JPEG, BMP, TIFF et bien d'autres via la bibliothèque C++ gratuite.
OpenImageIO est une puissante bibliothèque de traitement d'images qui permet aux concepteurs de logiciels de lire, d'écrire et de traiter les formats de fichiers d'images populaires dans C++ applications. Il fournit un soutien à plusieurs formats d'image populaires par le biais de la plomberie. Il fournit un soutien aux formats d'images populaires tels que OpenEXR, TIFF, JPEG/FF, NG, BMP, JPEG-2000, CO, PM, DP, FF, Field3D, Tex, Photosh
La bibliothèque OpenImageIO est largement utilisée dans les studios d'animation et de FX partout dans le monde et est également intégrée à de nombreux produits commerciaux. La bibliothèque OpenImageIO contient plusieurs outils d'image commandés qui présentent des caractéristiques comme la conversion des formats d'image à d'autres, la comparaison de deux images, l'impression d'informations détaillées, la recherche d'images simples, etc.
Premiers pas avec OpenImageIO
Le système de construction OpenImageIO est basé sur CMake. Si besoin de l'installer sur votre système. Après avoir construit OpenImageIO, si vous avez compilé avec l'indicateur EMBEDPLUGINS=0, vous devrez définir la variable d'environnement OIIO_LIBRARY_PATH pour qu'elle pointe vers le répertoire 'lib' où OpenImageIO est installé, sinon il ne pourra pas trouver les plugins.
Installez OpenImageIO via la commande git
git clone https://github.com/OpenImageIO/oiio.git
Lecture et écriture d'images via l'API C++
La bibliothèque OpenImageIO permet aux programmeurs de lire et d'écrire des images ainsi que de contrôler la manière dont les images ultérieures seront produites en externe dans la sortie. Normalement, toutes les images lues par la bibliothèque sont lues dans un ImageBuf soutenu par un ImageCache sous-jacent, et sont automatiquement converties en pixels flottants pour le stockage interne. Lors de l'écriture d'images, il affiche simplement l'image actuelle dans le fichier nommé. La bibliothèque de traitement d'image ne supprime pas l'image actuelle de la pile d'images ; il en enregistre simplement une copie.
Image avancée Lire par 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;
}
Conversion d'image en d'autres formats
La bibliothèque OpenImageIO fournit des fonctionnalités pour convertir des images vers d'autres formats de fichiers populaires. Il est très facile de convertir parmi les formats d'image pris en charge. L'utilitaire iconvert lira une image, puis l'écrira dans un nouveau format de fichier pris en charge. Il déduira simplement le format de fichier à partir de l'extension de fichier. Vous pouvez inclure une légende d'image, une description, des mots-clés ou des métadonnées.
Modifier les métadonnées d'image via C++
OpenImageIO API permet aux concepteurs de logiciels de modifier les métadonnées actuelles de l'image dans leurs C++ applications par la source ouverte API. Il fournit des commandements qui modifient les métadonnées de l'image existante, mais ne modifient pas ses valeurs pixel. La bonne chose est que seule l'image actuelle (image au sommet de la cheminée) est affectée, mais pas en aval. Vous pouvez aussi ajouter ou préciser des mots clés, ajouter des sous-titres ou une description, enlever toutes les métadonnées et plus.
Comment établir des métadonnées d'image par 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
Dessins ou textes sur les images par C++ API
Il est toujours très utile d'étiqueter vos images avec des titres utiles ou de marquer l'image pour les protéger contre une utilisation non autorisée. La bibliothèque OpenImageIO de la source ouverte comporte plusieurs caractéristiques importantes pour le dessin des formes, des points, des lignes, des boîtes ou du texte sur les images avec facilité. Vous pouvez dessiner des formes sur votre image ou y ajouter du texte avec quelques lignes de code. Les exemples de codes suivants montrent comment dessiner le texte sur une image et l'aligner.
Comment dessiner le texte en images 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);