@h4md1/visual-image-tool 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +267 -0
- package/dist/visual-image-tool.esm.js +807 -0
- package/dist/visual-image-tool.esm.js.map +1 -0
- package/dist/visual-image-tool.js +812 -0
- package/dist/visual-image-tool.js.map +1 -0
- package/dist/visual-image-tool.umd.js +2 -0
- package/dist/visual-image-tool.umd.js.map +1 -0
- package/package.json +42 -0
- package/src/index.js +12 -0
- package/src/visual-image-tool.js +803 -0
package/README.md
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
# VisualImageTool
|
|
2
|
+
|
|
3
|
+
Un outil léger en JavaScript vanilla pour définir des points focaux et zones de recadrage sur des images.
|
|
4
|
+
|
|
5
|
+
## Fonctionnalités
|
|
6
|
+
|
|
7
|
+
- **Point focal** : Définissez un point d'intérêt sur l'image avec un marqueur visuel
|
|
8
|
+
- **Zone de recadrage** : Définissez une zone de recadrage avec poignées de redimensionnement
|
|
9
|
+
- **Sans dépendances** : Fonctionne sans bibliothèques externes
|
|
10
|
+
- **API simple** : Interface claire et facile à utiliser
|
|
11
|
+
- **Personnalisable** : Options de configuration flexibles
|
|
12
|
+
- **Responsive** : S'adapte aux redimensionnements d'écran
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @h4md1/visual-image-tool
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Guide de démarrage rapide
|
|
21
|
+
|
|
22
|
+
### 1. Importation
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
// Importation ES modules (recommandé)
|
|
26
|
+
import VisualImageTool from '@h4md1/visual-image-tool';
|
|
27
|
+
|
|
28
|
+
// OU importation CommonJS
|
|
29
|
+
const VisualImageTool = require('@h4md1/visual-image-tool');
|
|
30
|
+
|
|
31
|
+
// OU utilisation directe via balise script (UMD)
|
|
32
|
+
// <script src="node_modules/image-tool/dist/image-tool.umd.js"></script>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 2. Initialisation
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
// Créer une instance avec une image
|
|
39
|
+
const imageTool = new VisualImageTool.VisualImageTool({
|
|
40
|
+
imageElement: document.getElementById('myImage'),
|
|
41
|
+
onChange: (data) => {
|
|
42
|
+
console.log('Point focal:', data.focusPoint);
|
|
43
|
+
console.log('Zone de recadrage:', data.cropZone);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 3. Utilisation des fonctionnalités
|
|
49
|
+
|
|
50
|
+
```javascript
|
|
51
|
+
// Activer le point focal
|
|
52
|
+
imageTool.toggleFocusPoint(true);
|
|
53
|
+
|
|
54
|
+
// Activer la zone de recadrage
|
|
55
|
+
imageTool.toggleCropZone(true);
|
|
56
|
+
|
|
57
|
+
// Définir manuellement un point focal
|
|
58
|
+
imageTool.setFocusPoint(x, y);
|
|
59
|
+
|
|
60
|
+
// Définir manuellement une zone de recadrage
|
|
61
|
+
imageTool.setCropZone(x, y, width, height);
|
|
62
|
+
|
|
63
|
+
// Obtenir les valeurs actuelles
|
|
64
|
+
const focusPoint = imageTool.getFocusPoint();
|
|
65
|
+
const cropZone = imageTool.getCropZone();
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Options de configuration
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
const imageTool = new VisualImageTool.VisualImageTool({
|
|
72
|
+
// Élément image (obligatoire) - peut être un sélecteur CSS ou un élément DOM
|
|
73
|
+
imageElement: '#myImage',
|
|
74
|
+
|
|
75
|
+
// Configuration du point focal (optionnel)
|
|
76
|
+
focusPoint: {
|
|
77
|
+
enabled: true, // Activer/désactiver la fonctionnalité
|
|
78
|
+
style: {
|
|
79
|
+
width: '30px',
|
|
80
|
+
height: '30px',
|
|
81
|
+
border: '3px solid white',
|
|
82
|
+
boxShadow: '0 0 0 2px black, 0 0 5px rgba(0,0,0,0.5)',
|
|
83
|
+
backgroundColor: 'rgba(255, 0, 0, 0.5)'
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
// Configuration de la zone de recadrage (optionnel)
|
|
88
|
+
cropZone: {
|
|
89
|
+
enabled: true, // Activer/désactiver la fonctionnalité
|
|
90
|
+
style: {
|
|
91
|
+
border: '1px dashed #fff',
|
|
92
|
+
backgroundColor: 'rgba(0, 0, 0, 0.4)'
|
|
93
|
+
},
|
|
94
|
+
handleStyle: {
|
|
95
|
+
width: '14px',
|
|
96
|
+
height: '14px',
|
|
97
|
+
backgroundColor: 'white',
|
|
98
|
+
border: '2px solid black',
|
|
99
|
+
boxShadow: '0 0 3px rgba(0,0,0,0.5)'
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
// Callback appelé lors des changements (optionnel)
|
|
104
|
+
onChange: function(data) {
|
|
105
|
+
// data contient focusPoint, cropZone, focusActive, cropActive
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## API complète
|
|
111
|
+
|
|
112
|
+
### Méthodes
|
|
113
|
+
|
|
114
|
+
#### `toggleFocusPoint(active)`
|
|
115
|
+
Active ou désactive le point focal.
|
|
116
|
+
- `active` (boolean, optionnel): Si défini, force l'état à cette valeur. Si omis, inverse l'état actuel.
|
|
117
|
+
- Retourne: L'instance VisualImageTool pour le chaînage.
|
|
118
|
+
|
|
119
|
+
#### `toggleCropZone(active)`
|
|
120
|
+
Active ou désactive la zone de recadrage.
|
|
121
|
+
- `active` (boolean, optionnel): Si défini, force l'état à cette valeur. Si omis, inverse l'état actuel.
|
|
122
|
+
- Retourne: L'instance VisualImageTool pour le chaînage.
|
|
123
|
+
|
|
124
|
+
#### `setFocusPoint(x, y)`
|
|
125
|
+
Définit la position du point focal.
|
|
126
|
+
- `x` (number): Coordonnée X en pixels originaux.
|
|
127
|
+
- `y` (number): Coordonnée Y en pixels originaux.
|
|
128
|
+
- Retourne: L'instance VisualImageTool pour le chaînage.
|
|
129
|
+
|
|
130
|
+
#### `setCropZone(x, y, width, height)`
|
|
131
|
+
Définit la position et les dimensions de la zone de recadrage.
|
|
132
|
+
- `x` (number): Coordonnée X en pixels originaux.
|
|
133
|
+
- `y` (number): Coordonnée Y en pixels originaux.
|
|
134
|
+
- `width` (number): Largeur en pixels originaux.
|
|
135
|
+
- `height` (number): Hauteur en pixels originaux.
|
|
136
|
+
- Retourne: L'instance VisualImageTool pour le chaînage.
|
|
137
|
+
|
|
138
|
+
#### `getFocusPoint()`
|
|
139
|
+
Obtient la position actuelle du point focal.
|
|
140
|
+
- Retourne: Un objet `{x, y}` avec les coordonnées en pixels originaux.
|
|
141
|
+
|
|
142
|
+
#### `getCropZone()`
|
|
143
|
+
Obtient la position et les dimensions actuelles de la zone de recadrage.
|
|
144
|
+
- Retourne: Un objet `{x, y, width, height}` avec les valeurs en pixels originaux.
|
|
145
|
+
|
|
146
|
+
#### `getImageDimensions()`
|
|
147
|
+
Obtient les dimensions originales de l'image.
|
|
148
|
+
- Retourne: Un objet `{width, height}` avec les dimensions en pixels originaux.
|
|
149
|
+
|
|
150
|
+
#### `destroy()`
|
|
151
|
+
Détruit l'instance et nettoie les ressources.
|
|
152
|
+
|
|
153
|
+
### Événements
|
|
154
|
+
|
|
155
|
+
L'outil utilise le callback `onChange` pour notifier des changements. Ce callback reçoit un objet avec les propriétés suivantes:
|
|
156
|
+
|
|
157
|
+
```javascript
|
|
158
|
+
{
|
|
159
|
+
focusPoint: {x, y}, // Position du point focal
|
|
160
|
+
cropZone: {x, y, width, height}, // Position et dimensions de la zone de recadrage
|
|
161
|
+
focusActive: true|false, // État d'activation du point focal
|
|
162
|
+
cropActive: true|false // État d'activation de la zone de recadrage
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Exemples d'intégration avec des frameworks
|
|
167
|
+
|
|
168
|
+
### React
|
|
169
|
+
|
|
170
|
+
```jsx
|
|
171
|
+
import React, { useEffect, useRef } from 'react';
|
|
172
|
+
import VisualImageTool from '@h4md1/visual-image-tool';
|
|
173
|
+
|
|
174
|
+
function ImageEditor() {
|
|
175
|
+
const imageRef = useRef(null);
|
|
176
|
+
const toolRef = useRef(null);
|
|
177
|
+
|
|
178
|
+
useEffect(() => {
|
|
179
|
+
if (imageRef.current && !toolRef.current) {
|
|
180
|
+
toolRef.current = new VisualImageTool({
|
|
181
|
+
imageElement: imageRef.current,
|
|
182
|
+
onChange: (data) => {
|
|
183
|
+
console.log('Données mises à jour:', data);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// Activer les fonctionnalités
|
|
188
|
+
toolRef.current.toggleFocusPoint(true);
|
|
189
|
+
toolRef.current.toggleCropZone(true);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Nettoyage
|
|
193
|
+
return () => {
|
|
194
|
+
if (toolRef.current) {
|
|
195
|
+
toolRef.current.destroy();
|
|
196
|
+
toolRef.current = null;
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
}, []);
|
|
200
|
+
|
|
201
|
+
return (
|
|
202
|
+
<div>
|
|
203
|
+
<img ref={imageRef} src="path/to/image.jpg" alt="Éditable" />
|
|
204
|
+
</div>
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Vue.js
|
|
210
|
+
|
|
211
|
+
```vue
|
|
212
|
+
<template>
|
|
213
|
+
<div>
|
|
214
|
+
<img ref="editableImage" src="path/to/image.jpg" alt="Éditable" />
|
|
215
|
+
</div>
|
|
216
|
+
</template>
|
|
217
|
+
|
|
218
|
+
<script>
|
|
219
|
+
import VisualImageTool from '@h4md1/visual-image-tool';
|
|
220
|
+
|
|
221
|
+
export default {
|
|
222
|
+
data() {
|
|
223
|
+
return {
|
|
224
|
+
imageTool: null
|
|
225
|
+
};
|
|
226
|
+
},
|
|
227
|
+
mounted() {
|
|
228
|
+
this.imageTool = new VisualImageTool({
|
|
229
|
+
imageElement: this.$refs.editableImage,
|
|
230
|
+
onChange: (data) => {
|
|
231
|
+
console.log('Données mises à jour:', data);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
// Activer les fonctionnalités
|
|
236
|
+
this.imageTool.toggleFocusPoint(true);
|
|
237
|
+
this.imageTool.toggleCropZone(true);
|
|
238
|
+
},
|
|
239
|
+
beforeDestroy() {
|
|
240
|
+
if (this.imageTool) {
|
|
241
|
+
this.imageTool.destroy();
|
|
242
|
+
this.imageTool = null;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
</script>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Démos
|
|
250
|
+
|
|
251
|
+
Consultez le dossier `demos/` pour des exemples complets :
|
|
252
|
+
|
|
253
|
+
- `basic-usage.html` : Exemple d'utilisation basique
|
|
254
|
+
- `custom-config.html` : Exemple avec configuration personnalisée
|
|
255
|
+
- `react-integration.jsx` : Exemple d'intégration avec React
|
|
256
|
+
- `vue-integration.js` : Exemple d'intégration avec Vue.js
|
|
257
|
+
|
|
258
|
+
## Compatibilité navigateur
|
|
259
|
+
|
|
260
|
+
- Chrome (dernières versions)
|
|
261
|
+
- Firefox (dernières versions)
|
|
262
|
+
- Safari (dernières versions)
|
|
263
|
+
- Edge (dernières versions)
|
|
264
|
+
|
|
265
|
+
## Licence
|
|
266
|
+
|
|
267
|
+
MIT
|