Le recadrage d'image
Le recadrage d'image, aussi nommé rogner (ou aussi cropping en anglais) dans LibGD est une opération consistant à extraire une partie d'une image, en supprimant les pixels en dehors de la zone d'intérêt. Cette technique est couramment utilisée pour redimensionner des images, retirer des éléments indésirables ou pour se concentrer sur une zone spécifique de l'image. LibGD fournit des fonctions permettant de sélectionner une sous-image et de la copier dans une nouvelle image, tout en conservant sa résolution originale. Le recadrage est essentiel dans de nombreux processus graphiques, comme la préparation d'images pour des vignettes, des publicités, ou la mise en avant d'une section particulière d'une image.
Fonctionnement du recadrage avec LibGD
Dans LibGD, le recadrage d'une image est réalisé avec la fonction gdImageCopy, permettant de copier une partie d'une image dans une autre image. La fonction prend en paramètre l'image source, l'image de destination, ainsi que les coordonnées de départ (x, y) de la zone à recadrer, et la largeur et la hauteur de la zone. Une fois le recadrage effectué, l'image de destination contient uniquement la portion sélectionnée de l'image source. Cette méthode est très efficace pour extraire des parties spécifiques d'une image sans modifier la taille de l'image source, ce qui permet de préserver la qualité de l'image tout en se concentrant sur la zone d'intérêt.
Applications du recadrage dans LibGD
Le recadrage d'image est utilisé dans divers domaines, tels que la retouche photo, la création de vignettes pour le Web, la détection de visages, ou encore la mise en forme d'images pour les médias sociaux. Par exemple, lorsqu'une image contient un élément spécifique (comme un logo ou un objet), le recadrage permet d'extraire cet élément et de le présenter de manière plus focalisée. Dans un contexte de développement web, les images de petites tailles ou de résolutions spécifiques sont souvent nécessaires, et le recadrage permet d'adapter les images aux dimensions exactes demandées, tout en conservant leur aspect visuel intact.
Limites et bonnes pratiques du recadrage
Bien que le recadrage soit une opération simple et utile, il faut faire attention à certains aspects. Par exemple, si la zone recadrée dépasse les limites de l'image source, la fonction de recadrage peut provoquer des erreurs ou des résultats inattendus. Il est donc important de vérifier que les coordonnées de la zone de recadrage sont valides et ne dépassent pas la taille de l'image. De plus, pour obtenir des résultats de qualité, il est recommandé d'éviter de recadrer trop près des bords, car cela pourrait introduire des artefacts ou des zones incomplètes. Enfin, le recadrage ne modifie pas directement les métadonnées de l'image source, il est donc crucial de gérer les fichiers de manière appropriée pour éviter les problèmes d'entreposage ou de manipulation après le recadrage.
Les fonctions
Quelques fonctions pour recadrer des images, automatiquement (détection automatique de la couleur de bordure), en utilisant une couleur donnée (avec ou sans tolérance) ou en utilisant un rectangle donné.
Exemple
- im2 = gdImageAutoCrop(im, GD_CROP_SIDES);
- if (im2) {
- gdImageDestroy(im); /* à moins que vous n'ayez besoin de l'image originale par la suite */
- /* faire quelque chose avec l'image recadrée */
- }
- gdImageDestroy(im2);
Voici un sommaire des fonctions de recadrage d'image que propose LibGD :
Nom | Description |
---|---|
gdImageCrop | Recadre une image selon un rectangle spécifié. |
gdImageCropAuto | Recadre automatiquement une image. |
gdImageCropThreshold | Recadre une image en utilisant une couleur donnée comme seuil. |
gdImageCrop
gdImagePtr gdImageCrop(gdImagePtr src, const gdRect * crop); |
Cette fonction permet de recadrer une image selon un rectangle donné.
Paramètre
Nom | Description |
---|---|
src | Ce paramètre permet d'indiquer l'image. |
crop | Ce paramètre permet d'indiquer le rectangle de recadrage, voir gdRect. |
Retour
Valeur | Description |
---|---|
Pointeur | L'image recadrée nouvellement créée, ou NULL en cas d'échec. |
Voir également
gdImageCropAuto
gdImagePtr gdImageCropAuto(gdImagePtr im, const unsigned int mode); |
Cette fonction permet de recadrer automatiquement une image. Cette fonction détecte la zone de recadrage en fonction du mode donné.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image. |
mode | Le mode de recadrage, voir gdCropMode. |
Retour
Valeur | Description |
---|---|
Pointeur | L'image recadrée nouvellement créée, ou NULL en cas d'échec. |
Voir également
gdImageCropThreshold
gdImagePtr gdImageCropThreshold(gdImagePtr im, const unsigned int color, const float threshold); |
Cette fonction permet de recadrer une image en utilisant une couleur donnée. Le seuil définit la tolérance à utiliser lors de la comparaison de la couleur de l'image et de la couleur à recadrer. La méthode utilisée pour calculer la différence de couleur est basée sur la distance de couleur dans le cube RVB(A).
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image. |
color | Ce paramètre permet d'indiquer la couleur du rognage. |
threshold | Ce paramètre permet d'indiquer le seuil de rognage. |
Retour
Valeur | Description |
---|---|
Pointeur | L'image recadrée nouvellement créée, ou NULL en cas d'échec. |
Voir aussi
Utilisation pratique
Voici comment utiliser les fonctions de recadrage (cropping) dans LibGD : gdImageCrop, gdImageCropAuto et gdImageCropThreshold. Ces fonctions permettent de recadrer des images selon différentes méthodes.
Préparation de l'image source
Avant de procéder au recadrage, vous devez charger ou créer une image source. Voici comment charger une image depuis un fichier existant :
- #include <gd.h>
- #include <stdio.h>
-
- int main() {
- /* Charger une image PNG existante */
- FILE *in = fopen("input.png", "rb");
- if (!in) {
- printf("Impossible de charger le fichier image.\n");
- return 1;
- }
-
- gdImagePtr img = gdImageCreateFromPng(in);
- fclose(in);
-
- if (!img) {
- printf("Erreur lors du chargement de l'image.\n");
- return 1;
- }
-
- printf("Image chargée avec succès.\n");
- gdImageDestroy(img); /* Libérer l'image après utilisation */
- return 0;
- }
Recadrage avec gdImageCrop
La fonction gdImageCrop permet de recadrer une image en spécifiant un rectangle (position x, y, largeur, hauteur). Voici un exemple :
- #include <gd.h>
- #include <stdio.h>
-
- int main() {
- /* Charger l'image source */
- FILE *in = fopen("input.png", "rb");
- gdImagePtr img = gdImageCreateFromPng(in);
- fclose(in);
-
- /* Définir un rectangle pour le recadrage */
- gdRect rect;
- rect.x = 50; // Position x de départ
- rect.y = 50; // Position y de départ
- rect.width = 200; // Largeur du rectangle
- rect.height = 150; // Hauteur du rectangle
-
- /* Appliquer le recadrage */
- gdImagePtr cropped = gdImageCrop(img, &rect);
- if (!cropped) {
- printf("Erreur lors du recadrage de l'image.\n");
- gdImageDestroy(img);
- return 1;
- }
-
- /* Sauvegarder l'image recadrée */
- FILE *out = fopen("output_cropped.png", "wb");
- gdImagePng(cropped, out);
- fclose(out);
-
- /* Libérer la mémoire */
- gdImageDestroy(img);
- gdImageDestroy(cropped);
-
- printf("Recadrage effectué avec succès.\n");
- return 0;
- }
Recadrage automatique avec gdImageCropAuto
La fonction gdImageCropAuto détecte automatiquement la zone non vide d'une image et recadre autour de cette zone.
- #include <gd.h>
- #include <stdio.h>
-
- int main() {
- /* Charger l'image source */
- FILE *in = fopen("input.png", "rb");
- gdImagePtr img = gdImageCreateFromPng(in);
- fclose(in);
-
- /* Recadrage automatique */
- gdImagePtr cropped = gdImageCropAuto(img, GD_CROP_SIDES); /* Peut être GD_CROP_SIDES, GD_CROP_BLACK,... */
- if (!cropped) {
- printf("Erreur lors du recadrage automatique de l'image.\n");
- gdImageDestroy(img);
- return 1;
- }
-
- /* Sauvegarder l'image recadrée */
- FILE *out = fopen("output_cropped_auto.png", "wb");
- gdImagePng(cropped, out);
- fclose(out);
-
- /* Libérer la mémoire */
- gdImageDestroy(img);
- gdImageDestroy(cropped);
-
- printf("Recadrage automatique effectué avec succès.\n");
- return 0;
- }
Recadrage par seuil de couleur avec gdImageCropThreshold
La fonction gdImageCropThreshold permet de recadrer une image en fonction d'une couleur spécifique (seuil).
- #include <gd.h>
- #include <stdio.h>
-
- int main() {
- /* Charger l'image source */
- FILE *in = fopen("input.png", "rb");
- gdImagePtr img = gdImageCreateFromPng(in);
- fclose(in);
-
- /* Définir la couleur de seuil (par exemple, blanc : RGB 255, 255, 255) */
- int thresholdColor = gdTrueColor(255, 255, 255);
-
- /* Appliquer le recadrage par seuil */
- gdImagePtr cropped = gdImageCropThreshold(img, thresholdColor, 10); /* 10 est la tolérance */
- if (!cropped) {
- printf("Erreur lors du recadrage par seuil.\n");
- gdImageDestroy(img);
- return 1;
- }
-
- /* Sauvegarder l'image recadrée */
- FILE *out = fopen("output_cropped_threshold.png", "wb");
- gdImagePng(cropped, out);
- fclose(out);
-
- /* Libérer la mémoire */
- gdImageDestroy(img);
- gdImageDestroy(cropped);
-
- printf("Recadrage par seuil effectué avec succès.\n");
- return 0;
- }