Download the PHP package andydefer/laravel-images without Composer
On this page you can find all versions of the php package andydefer/laravel-images. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download andydefer/laravel-images
More information about andydefer/laravel-images
Files in andydefer/laravel-images
Package laravel-images
Short Description Laravel package providing polymorphic image management with upload, manipulation, storage, and multiple image types (avatar, cover, gallery, thumbnail, etc.) with Repository pattern, DTOs, Enums, and Value Objects.
License MIT
Informations about the package laravel-images
Laravel Images - Documentation
Table des matières
- Installation
- Configuration
- Concepts de base
- Gestion des images
- Gestion des albums
- Processeurs d'images
- Stockage
- Directives CLI
- Exemples complets
- API Référence
- Événements automatiques
- Relations inverses (Light/Dark)
1. Installation
Prérequis
- PHP 8.1 ou supérieur
- Laravel 10.x, 11.x, 12.x, 13.x, 14.x ou 15.x
- Extension GD (par défaut) ou Imagick
Publier les migrations
Publier la configuration
2. Configuration
Fichier de configuration
Variables d'environnement
3. Concepts de base
3.1 Image
Une image est un modèle Eloquent qui représente un fichier image stocké sur le disque.
3.2 Album
Un album regroupe plusieurs images avec un ordre défini.
3.3 Relations polymorphiques
Les images et albums utilisent des relations polymorphiques (morphTo, morphToMany) pour s'attacher à n'importe quel modèle Eloquent.
3.4 Trait HasMediables
Le package fournit un trait HasMediables pour ajouter des attributs calculés à vos modèles.
Installation dans un modèle
Attributs disponibles
| Attribut | Type | Description |
|---|---|---|
has_images |
bool |
Vérifie si le modèle a des images |
images_count |
int |
Nombre total d'images |
primary_image |
Image|null |
Image principale |
avatar |
Image|null |
Image de type AVATAR |
cover |
Image|null |
Image de type COVER |
banner |
Image|null |
Image de type BANNER |
logo |
Image|null |
Image de type LOGO |
icon |
Image|null |
Image de type ICON |
gallery_images |
Collection<Image> |
Images de type GALLERY |
has_albums |
bool |
Vérifie si le modèle a des albums |
albums_count |
int |
Nombre total d'albums |
primary_album |
Album|null |
Premier album créé |
featured_album |
Album|null |
Album mis en avant |
public_albums |
Collection<Album> |
Albums publics |
private_albums |
Collection<Album> |
Albums privés |
Exemple d'utilisation
4. Gestion des images
4.1 Upload d'une image
4.2 Upload multiple
4.3 Récupération des images
4.4 Mise à jour
4.5 Suppression
4.6 Miniatures
5. Gestion des albums
5.1 Création d'un album
5.2 Gestion des images d'un album
5.3 Récupération des albums
5.4 Gestion de la couverture
5.5 Mise à jour et suppression
6. Processeurs d'images
6.1 GD vs Imagick
| Feature | GD | Imagick |
|---|---|---|
| Disponibilité | ✅ Par défaut | ⚠️ Installation requise |
| Performance | Bonne | Excellente |
| Qualité | Bonne | Supérieure |
| Formats supportés | JPG, PNG, GIF, WebP | JPG, PNG, GIF, WebP, HEIC, AVIF, TIFF |
| Utilisation | new GdImageProcessor() |
new ImagickImageProcessor() |
6.2 Utilisation du processeur
6.3 Redimensionnement avancé
7. Stockage
7.1 Configuration du stockage
Note : Le stockage utilise des chemins relatifs au dossier courant d'exécution. Aucun préfixe n'est ajouté automatiquement.
7.2 Opérations de stockage
8. Directives CLI
8.1 Installation de la CLI
Le package fournit une directive CLI pour la gestion des images :
| Directive | Alias | Description |
|---|---|---|
images:scan |
ims |
Scanne un dossier et génère un inventaire JSON ou PHP |
8.2 Commande de scan
Paramètres :
| Paramètre | Description |
|---|---|
{source} |
Dossier source à scanner |
{output} |
Fichier de sortie (.json ou .php) |
{depth=0} |
Profondeur maximale de scan (0 = illimitée) |
{extensions*} |
Extensions d'images à inclure (ex: png jpg webp ou [png,jpg]) |
{excludes*} |
Dossiers à exclure du scan |
{--hash} |
Inclut le hash MD5 de chaque image |
{--relative} |
Rend les chemins relatifs au répertoire source |
Exemples :
Exemple de sortie JSON (sans --relative) :
Exemple de sortie JSON (avec --relative) :
Exemple de sortie PHP :
8.3 Exemple de sortie du scan
9. Exemples complets
9.1 Upload d'avatar avec options
9.2 Galerie d'images
9.3 Export d'images avec filtrage
9.4 Audit d'images avec scan CLI
10. API Référence
ImageService
| Méthode | Description |
|---|---|
findImage(string $id): ?Image |
Trouve une image par UUID |
upload(...): Image |
Upload une image |
uploadMultiple(...): Collection |
Upload plusieurs images |
update(ImageRecord $record, string $id): Image |
Met à jour une image |
delete(string $id, bool $deleteFile): void |
Supprime une image |
deleteMultiple(array<string> $ids, bool $deleteFile): void |
Supprime plusieurs images |
deleteAllForModel(Model $model, bool $deleteFile): void |
Supprime toutes les images d'un modèle |
getImagesForModel(Model $model, ?ImageType $type): Collection |
Récupère les images d'un modèle |
getPrimaryImage(Model $model): ?Image |
Récupère l'image principale |
setAsPrimary(string $id, Model $model): void |
Définit une image comme principale |
countImages(Model $model, ?ImageType $type): int |
Compte les images |
getImagesUpdatedAfter(DateTimeVO $date): Collection |
Images mises à jour après une date |
reorder(array<string> $ids): void |
Réorganise les images |
getThumbnailUrl(string $imageId, string $size): string |
URL de la miniature |
syncInverseRelation(Image $image): void |
Synchronise la relation inverse (light/dark) |
getImageProcessor(): ImageProcessorInterface |
Retourne le processeur |
getStorage(): ImageStorageInterface |
Retourne le stockage |
AlbumService
| Méthode | Description |
|---|---|
createAlbum(...): Album |
Crée un album |
addImagesToAlbum(Album $album, array<string> $imageIds): void |
Ajoute des images |
addImageToAlbum(Album $album, string $imageId, int $order): void |
Ajoute une image |
removeImageFromAlbum(Album $album, string $imageId): void |
Retire une image |
removeAllImagesFromAlbum(Album $album): void |
Vide un album |
setCoverImage(Album $album, string $imageId): void |
Définit la couverture |
getAlbumImages(Album $album): Collection |
Images d'un album |
getAlbumsForModel(Model $model, bool $onlyPublic): Collection |
Albums d'un modèle |
getAlbumBySlug(string|SlugVO $slug): ?Album |
Album par slug |
updateAlbum(string $id, AlbumOptionsRecord $options): Album |
Met à jour un album |
deleteAlbum(string $id, bool $deleteImages): void |
Supprime un album |
reorderAlbumImages(Album $album, array<string> $imageIds): void |
Réorganise les images |
duplicateAlbum(Album $album, string $newName): Album |
Duplique un album |
countAlbumImages(Album $album): int |
Compte les images |
isAlbumEmpty(Album $album): bool |
Vérifie si l'album est vide |
getAlbumCoverImage(Album $album): ?Image |
Image de couverture |
getFeaturedAlbums(int $limit): Collection |
Albums mis en avant |
ImageType
| Type | Description |
|---|---|
AVATAR |
Photo de profil |
COVER |
Photo de couverture |
GALLERY |
Galerie d'images |
THUMBNAIL |
Miniature |
ATTACHMENT |
Pièce jointe |
LOGO |
Logo |
ICON |
Icône |
BANNER |
Bannière |
PRODUCT |
Image de produit |
BinaryChoice
| Valeur | Description |
|---|---|
YES |
Oui |
NO |
Non |
11. Événements automatiques
Le package utilise des observers Eloquent pour automatiser certaines opérations critiques sans intervention manuelle.
11.1 ImageObserver
L'ImageObserver gère automatiquement les relations inverses entre les variantes d'images (claires/sombres) et maintient l'intégrité référentielle.
| Événement | Action automatique | Description |
|---|---|---|
created |
syncInverseRelation() |
Lorsqu'une nouvelle image est créée, le système détecte automatiquement si c'est une variante -light ou -dark et la lie à son homologue si elle existe dans le même contexte (même modèle parent, même type). |
updated |
syncInverseRelation() |
Lorsque le nom de fichier d'une image est modifié, la relation inverse est réévaluée pour maintenir la cohérence. |
deleted |
inverse_image_id = null |
Lorsqu'une image est supprimée, toutes les images qui la référencent comme inverse_image_id voient cette référence automatiquement mise à null pour éviter les orphelins. |
Exemple concret :
11.2 AlbumObserver
L'AlbumObserver maintient l'intégrité des relations entre albums et images.
| Événement | Action automatique | Description |
|---|---|---|
deleting |
images()->detach() |
Avant la suppression (soft delete) d'un album, toutes les relations avec ses images sont automatiquement détachées pour éviter les enregistrements orphelins dans la table pivot. |
forceDeleted |
images()->detach() |
Lors de la suppression définitive d'un album, les relations sont également nettoyées pour maintenir la cohérence. |
Exemple concret :
12. Relations inverses (Light/Dark)
12.1 Principe
Le package supporte nativement la gestion des paires d'images inverses (light/dark) grâce à la colonne inverse_image_id dans la table images. Cette fonctionnalité est particulièrement utile pour :
- Bannières thématiques : Afficher une version claire ou sombre selon le thème de l'interface
- Logos adaptatifs : Proposer un logo clair sur fond sombre et vice-versa
- Icônes contextuelles : Alterner entre variantes selon le contexte d'affichage
12.2 Comment ça fonctionne
La détection des paires se base sur la convention de nommage des fichiers :
| Variante | Pattern | Exemple |
|---|---|---|
| Dark | *-dark.* |
logo-dark.png, banner-dark.jpg |
| Light | *-light.* |
logo-light.png, banner-light.jpg |
12.3 Synchronisation automatique
La synchronisation est entièrement automatique via l'ImageObserver :
-
Création : Lorsque vous uploadez une image avec un nom contenant
-lightou-dark, le système recherche automatiquement son homologue dans le même contexte (mêmeimageable_type,imageable_idettype). -
Liaison : Si l'homologue existe, les deux images sont liées bidirectionnellement via
inverse_image_id. - Nettoyage : Si l'homologue est supprimé, la référence est automatiquement mise à
null.
12.4 Utilisation
12.5 Synchronisation manuelle
Bien que la synchronisation soit automatique, vous pouvez également la déclencher manuellement :
12.6 Cas d'usage avancé
12.7 Limitations
- La détection se base uniquement sur le nom de fichier original (
original_filename) - Les deux images doivent être dans le même contexte (même
imageable_type,imageable_id,type) - La relation est stockée via une colonne
inverse_image_idde type UUID dans la tableimages
Licence
MIT © Andy Defer
All versions of laravel-images with dependencies
laravel/framework Version ^12.0|^13.0|^14.0|^15.0
intervention/image Version ^3.0
andydefer/laravel-utils Version ^0.10.98