Ce cours est une alternative au package Intervention Image pour un travail plus flexible avec du texte sur l'image. Utilisez-le si vous devez ajuster le texte dans une zone donnée, calculer automatiquement la taille de la police et modifier la hauteur des lignes . La méthode de dessin de texte sait aussi restituer la taille réelle des inscriptions, ce qui permettra par exemple de placer des blocs les uns sous les autres.
En plus d'un travail flexible avec le texte, la classe fournit une API Image similaire au package Intervention. Y compris le redimensionnement intelligent des affiches, les filtres, le dessin de formes et la superposition d'autres images.
Si vous n'utilisez pas composer dans votre travail, vous pourriez également être intéressé par la simplicité de la classe et l'absence de toute dépendance. Notez que cette classe prend uniquement en charge le pilote PHP-GD. Vous pouvez également facilement hériter de votre classe : toutes les méthodes du parent peuvent être remplacées.
La meilleure façon d’installer poster editor est rapidement et facilement avec Composer.
Cependant, vous pouvez exiger la classe directement sans utiliser de chargeur - cela n'affectera en rien les performances.
php composer.phar require antonlukin/poster-editor
En cas d'erreur, les méthodes de classe renvoient une exception.
Par conséquent, il est préférable de les appeler à l’intérieur d’un bloc try..catch .
// Using composer
require_once __DIR__ . ' /vendor/autoload.php ' ;
// Or directly
// require_once __DIR__ . '/PosterEditor.php';
try {
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 600 , 600 );
$ image -> show ();
} catch ( Exception $ e ) {
echo $ e -> getMessage ();
} $image->get()
Obtenez la ressource image pour utiliser les commandes raw gd.
$image->set(instance $resourse)
Définissez la ressource image après avoir utilisé les commandes raw gd.
$image->make(mixed $data)
Créez une nouvelle instance d'image à partir d'un fichier ou de données binaires.
$image->insert(mixed $data, array $options = array())
Collez une source d'image donnée sur l'image actuelle avec une position facultative. Le premier paramètre peut être des données binaires ou un chemin d’accès au fichier ou à une autre instance de classe. Les options sont un tableau de coordonnées de décalage relatif x/y à partir du coin supérieur gauche et une opacité de 0 à 100, où 0 n'est pas une transparence. Par défaut, l'image sera centrée.
$image->canvas(int $width, int $height, array $options = array())
Initialisez la toile en largeur et en hauteur. Les options de couleur d’arrière-plan se trouvent dans une gamme de paramètres de couleur/opacité. Par défaut toile noire sans opacité.
$image->show(string $format = null, int $quality = 90)
Envoie une réponse HTTP avec l'image actuelle dans un format et une qualité donnés. Le format est une extension d'image de fichier. Par défaut, les données de réponse seront codées dans le type de l'image actuelle. Si aucun type d'image n'est encore défini, la méthode renverra des données codées en jpeg. La qualité est normalisée pour tous les types de fichiers dans une plage allant de 0 (mauvaise qualité, petit fichier) à 100 (meilleure qualité, gros fichier). La valeur par défaut est 90. Le format PNG est sans perte et la qualité n'affecte que la taille de l'image et la vitesse de compression.
$image->save(string $path, int $quality = 90, string $format = null)
Enregistrez l'état actuel de l'objet image dans le système de fichiers. Définissez éventuellement un certain chemin où l'image doit être enregistrée. Le type d'image sera défini par extension de fichier. Si aucune extension n'est disponible, les données de réponse seront codées dans le type de l'image actuelle. Si aucun type d'image n'est encore défini, la méthode renverra des données codées en jpeg. Vous pouvez éventuellement remplacer cela avec le paramètre format. La qualité est normalisée pour tous les types de fichiers dans une plage allant de 0 (mauvaise qualité, petit fichier) à 100 (meilleure qualité, gros fichier). La valeur par défaut est 90. Le format PNG est sans perte et la qualité n'affecte que la taille de l'image et la vitesse de compression.
$image->destroy()
Libère la mémoire associée à l'instance d'image actuelle avant la fin du script PHP. Normalement, les ressources sont détruites automatiquement une fois le script terminé.
$image->width()
Renvoie la hauteur en pixels de l'image actuelle.
$image->height()
Renvoie la hauteur en pixels de l'image actuelle.
$image->resize(int $width, int $height)
Redimensionne l'image actuelle en fonction de la largeur et de la hauteur données. Ne fait pas attention au rapport hauteur/largeur. Afin de redimensionner proportionnellement, utilisez les méthodes upsize et downsize .
$image->upsize(int $width = null, int $height = null)
Agrandir l'image sur le côté le plus grand. Calculé par rapport pour la largeur ou la hauteur annulée.
$image->downsize(int $width = null, int $height = null)
Réduire l'image sur le côté le plus grand. Calculé par rapport pour la largeur ou la hauteur annulée.
$image->crop(int $width, int $height, array $options = array())
Découpez une partie rectangulaire de l'image actuelle avec une largeur et une hauteur données. Définissez des coordonnées x, y facultatives pour déplacer le coin supérieur gauche de la découpe vers une certaine position.
$image->fit(int $width, int $height, string $position = 'center')
Combinez le recadrage et le redimensionnement pour formater l'image de manière intelligente. La méthode trouvera automatiquement le rapport hauteur/largeur le mieux adapté à l’image actuelle, la découpera et la redimensionnera à la dimension donnée. Positions possibles top-left , top , top-right , bottom-left , bottom , bottom-right , right , left et center par défaut.
$image->line(int $x1, int $y1, int $x2, int $y2, array $options = array())
Tracez une ligne du point x,y 1 au point x,y 2 sur l'image actuelle. Utilisez le paramètre d’options pour définir les valeurs de couleur, d’opacité et de largeur.
$image->rectangle(int $x, int $y, int $width, int $height, array $options = array())
Dessinez un rectangle coloré sur l'image actuelle. Utilisez le paramètre d'options pour définir les valeurs de couleur, d'opacité, d'épaisseur et de contour.
$image->ellipse(int $x, int $y, int $width, int $height, array $options = array())
Dessinez une ellipse. Utilisez le paramètre d'options pour définir les valeurs de couleur, d'opacité et de contour.
$image->brightness(int $level = 0)
Modifiez la luminosité de l’image actuelle selon le niveau donné. Utilisez des valeurs comprises entre -100 pour une luminosité minimale de 0 pour aucun changement et +100 pour une luminosité maximale.
$image->contrast(int $level = 0)
Modifiez le contraste de l'image actuelle selon le niveau donné. Utilisez des valeurs comprises entre -100 pour un contraste minimum de 0 pour aucun changement et +100 pour un contraste maximum.
$image->grayscale()
Transformez une image en une version en niveaux de gris.
$image->blur()
Appliquez un effet d'image flou.
$image->invert()
Inverser les couleurs d'une image.
$image->blackout()
Dessinez un rectangle d'opacité noir sur l'image.
$image->rotate(int $angle, array $options = array())
Faire pivoter l'image. Définissez un angle en degrés et une couleur facultative de la zone découverte après la rotation.
$image->text(string $text, array $options = array(), array &$boundary = array())
Dessinez du texte sur l'image. Options possibles :
Utilisez la limite pour obtenir les dimensions réelles de la zone de texte dessinée. Voir les exemples détaillés ci-dessous.
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 , ' bottom ' )-> blackout ( 50 );
$ logo = new PosterEditor PosterEditor ();
$ logo -> make ( ' images/logo.png ' )-> downsize ( 150 , null );
$ image -> insert ( $ logo , array ( ' x ' => 50 , ' y ' => 50 ))-> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 );
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Lorem ipsum dolor sit amet ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 1000 ,
' height ' => 400 ,
' horizontal ' => ' center ' ,
' vertical ' => ' center ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 24 ,
' lineheight ' => 1.75 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' jpg ' , 70 );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 900 , 600 );
$ image -> blackout ( 70 );
$ image -> text (
' Lorem ipsum dolor d d 4 g sit amet, consectetur adipiscing et, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex eas commodo consequat sdfsdfl ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 600 ,
' height ' => 400 ,
' horizontal ' => ' justify ' ,
' vertical ' => ' justify ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' png ' );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> crop (
900 , 600 ,
array (
' x ' => ' 0 ' ,
' y ' => ' 100 '
)
);
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Large title with unknown height. Can be multi-line ' ,
array (
' x ' => 50 ,
' y ' => 100 ,
' width ' => 800 ,
' fontpath ' => ' /fonts/merriweather.ttf ' ,
' fontsize ' => 48 ,
' lineheight ' => 1.5 ,
' color ' => ' #9999ff ' ,
),
$ boundary
);
$ image -> text (
' This text appears right after title using smart boundaries ' ,
array (
' x ' => 50 ,
' y ' => $ boundary [ ' y ' ] + $ boundary [ ' height ' ],
' width ' => 800 ,
' fontpath ' => ' /fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ff9999 ' ,
),
$ boundary
);
$ image -> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1000 , 630 , ' bottom ' );
$ image -> contrast ( 5 )-> brightness (- 30 )-> blur ();
$ image -> rectangle (
20 , 20 , 960 , 590 ,
array (
' color ' => ' #ffffff ' ,
' outline ' => true ,
' width ' => 4 ,
)
);
$ image -> ellipse (
200 , 200 , 200 , 200 ,
array (
' color ' => ' #00ff00 ' ,
' opacity ' => 50 ,
)
);
$ image -> ellipse (
800 , 200 , 200 , 200 ,
array (
' color ' => ' #ff0000 ' ,
' opacity ' => 50 ,
)
);
$ image -> rectangle (
480 , 280 , 80 , 140 ,
array (
' color ' => ' #0000ff ' ,
)
);
$ image -> line (
200 , 500 , 800 , 500 ,
array (
' color ' => array ( 255 , 255 , 0 ),
' opacity ' => 10 ,
' width ' => 4 ,
)
);
$ image -> show ( ' png ' );
Tout le code du projet est stocké sur Github. La meilleure façon d'aider le projet est de signaler un bug ou d'ajouter de nouvelles fonctionnalités. Vous pouvez également ouvrir ici un ticket ou envoyer une pull request.