Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Les fichiers d'entête de bibliothèque
Les fichiers de code source
Référence des fonctions
Les premiers pas
Les formats d'image
La quantification des couleurs
Le recadrage d'image
Le rendu des polices de caractères FreeType dans LibGD
Les filtres d'image
Polices de caractères intégrées
Les matrices
Les transformations
Les entrées/sorties AVIF
Les entrées/sorties BMP
Les entrées/sorties GD
Les entrées/sorties GD2
Les entrées GIF
Les sorties GIF
Les entrées/sorties HEIF
Les entrées/sorties JPEG
Les entrées/sorties PNG
Les entrées TGA
Les entrées/sorties TIFF
Les entrées/sorties WBMP
Les entrées/sorties WebP
Les entrées/sorties XBM
Les entrées XPM
Police de caractères géante
Grande police de caractères
Police de caractères moyennement grasse
Petite police de caractères
Très petite police de caractères
Préface
Notes légales
Dictionnaire
Recherche

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

  1. im2 = gdImageAutoCrop(im, GD_CROP_SIDES);
  2. if (im2) {
  3.     gdImageDestroy(im); /* à moins que vous n'ayez besoin de l'image originale par la suite */
  4.     /* faire quelque chose avec l'image recadrée */
  5. }
  6. 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 :

  1. #include <gd.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.     /* Charger une image PNG existante */
  6.     FILE *in = fopen("input.png", "rb");
  7.     if (!in) {
  8.         printf("Impossible de charger le fichier image.\n");
  9.         return 1;
  10.     }
  11.  
  12.     gdImagePtr img = gdImageCreateFromPng(in);
  13.     fclose(in);
  14.  
  15.     if (!img) {
  16.         printf("Erreur lors du chargement de l'image.\n");
  17.         return 1;
  18.     }
  19.  
  20.     printf("Image chargée avec succès.\n");
  21.     gdImageDestroy(img); /* Libérer l'image après utilisation */
  22.     return 0;
  23. }

Recadrage avec gdImageCrop

La fonction gdImageCrop permet de recadrer une image en spécifiant un rectangle (position x, y, largeur, hauteur). Voici un exemple :

  1. #include <gd.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.     /* Charger l'image source */
  6.     FILE *in = fopen("input.png", "rb");
  7.     gdImagePtr img = gdImageCreateFromPng(in);
  8.     fclose(in);
  9.  
  10.     /* Définir un rectangle pour le recadrage */
  11.     gdRect rect;
  12.     rect.x = 50;     // Position x de départ
  13.     rect.y = 50;     // Position y de départ
  14.     rect.width = 200; // Largeur du rectangle
  15.     rect.height = 150; // Hauteur du rectangle
  16.  
  17.     /* Appliquer le recadrage */
  18.     gdImagePtr cropped = gdImageCrop(img, &rect);
  19.     if (!cropped) {
  20.         printf("Erreur lors du recadrage de l'image.\n");
  21.         gdImageDestroy(img);
  22.         return 1;
  23.     }
  24.  
  25.     /* Sauvegarder l'image recadrée */
  26.     FILE *out = fopen("output_cropped.png", "wb");
  27.     gdImagePng(cropped, out);
  28.     fclose(out);
  29.  
  30.     /* Libérer la mémoire */
  31.     gdImageDestroy(img);
  32.     gdImageDestroy(cropped);
  33.  
  34.     printf("Recadrage effectué avec succès.\n");
  35.     return 0;
  36. }

Recadrage automatique avec gdImageCropAuto

La fonction gdImageCropAuto détecte automatiquement la zone non vide d'une image et recadre autour de cette zone.

  1. #include <gd.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.     /* Charger l'image source */
  6.     FILE *in = fopen("input.png", "rb");
  7.     gdImagePtr img = gdImageCreateFromPng(in);
  8.     fclose(in);
  9.  
  10.     /* Recadrage automatique */
  11.     gdImagePtr cropped = gdImageCropAuto(img, GD_CROP_SIDES); /* Peut être GD_CROP_SIDES, GD_CROP_BLACK,... */
  12.     if (!cropped) {
  13.         printf("Erreur lors du recadrage automatique de l'image.\n");
  14.         gdImageDestroy(img);
  15.         return 1;
  16.     }
  17.  
  18.     /* Sauvegarder l'image recadrée */
  19.     FILE *out = fopen("output_cropped_auto.png", "wb");
  20.     gdImagePng(cropped, out);
  21.     fclose(out);
  22.  
  23.     /* Libérer la mémoire */
  24.     gdImageDestroy(img);
  25.     gdImageDestroy(cropped);
  26.  
  27.     printf("Recadrage automatique effectué avec succès.\n");
  28.     return 0;
  29. }

Recadrage par seuil de couleur avec gdImageCropThreshold

La fonction gdImageCropThreshold permet de recadrer une image en fonction d'une couleur spécifique (seuil).

  1. #include <gd.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.     /* Charger l'image source */
  6.     FILE *in = fopen("input.png", "rb");
  7.     gdImagePtr img = gdImageCreateFromPng(in);
  8.     fclose(in);
  9.  
  10.     /* Définir la couleur de seuil (par exemple, blanc : RGB 255, 255, 255) */
  11.     int thresholdColor = gdTrueColor(255, 255, 255);
  12.  
  13.     /* Appliquer le recadrage par seuil */
  14.     gdImagePtr cropped = gdImageCropThreshold(img, thresholdColor, 10); /* 10 est la tolérance */
  15.     if (!cropped) {
  16.         printf("Erreur lors du recadrage par seuil.\n");
  17.         gdImageDestroy(img);
  18.         return 1;
  19.     }
  20.  
  21.     /* Sauvegarder l'image recadrée */
  22.     FILE *out = fopen("output_cropped_threshold.png", "wb");
  23.     gdImagePng(cropped, out);
  24.     fclose(out);
  25.  
  26.     /* Libérer la mémoire */
  27.     gdImageDestroy(img);
  28.     gdImageDestroy(cropped);
  29.  
  30.     printf("Recadrage par seuil effectué avec succès.\n");
  31.     return 0;
  32. }


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mardi, le 8 octobre 2024