@digipair/skill-sharp 0.95.7 → 0.97.0

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/schema.fr.json CHANGED
@@ -24,579 +24,729 @@
24
24
  "type": "string"
25
25
  }
26
26
  }
27
- ]
28
- }
29
- },
30
- "/stats": {
31
- "post": {
32
- "tags": [
33
- "service"
34
27
  ],
35
- "summary": "Statistiques",
36
- "description": "Retourne des statistiques sur l’image comme la moyenne ou l’écart-type.",
37
- "parameters": [
38
- {
39
- "name": "content",
40
- "required": true,
41
- "schema": {
42
- "type": "string"
28
+ "responses": {
29
+ "200": {
30
+ "description": "Objet des métadonnées de l'image",
31
+ "content": {
32
+ "application/json": {
33
+ "schema": {
34
+ "type": "object",
35
+ "properties": {
36
+ "width": {
37
+ "type": "number",
38
+ "description": "Largeur de l'image en pixels"
39
+ },
40
+ "height": {
41
+ "type": "number",
42
+ "description": "Hauteur de l'image en pixels"
43
+ },
44
+ "channels": {
45
+ "type": "number",
46
+ "description": "Nombre de canaux de couleur"
47
+ },
48
+ "format": {
49
+ "type": "string",
50
+ "description": "Format de l'image (jpeg, png, webp, etc.)"
51
+ },
52
+ "space": {
53
+ "type": "string",
54
+ "description": "Espace colorimétrique (srgb, rgb16, cmyk, etc.)"
55
+ },
56
+ "density": {
57
+ "type": "number",
58
+ "description": "Densité de l'image en pixels par pouce"
59
+ },
60
+ "hasProfile": {
61
+ "type": "boolean",
62
+ "description": "Si l'image a un profil de couleur intégré"
63
+ },
64
+ "hasAlpha": {
65
+ "type": "boolean",
66
+ "description": "Si l'image a un canal alpha"
67
+ }
68
+ }
69
+ "width": 1920,
70
+ "height": 1080,
71
+ "channels": 3,
72
+ "format": "jpeg",
73
+ "space": "srgb",
74
+ "density": 72,
75
+ "hasProfile": false,
76
+ "hasAlpha": false
77
+ }
78
+ }
43
79
  }
44
80
  }
45
- ]
81
+ }
46
82
  }
47
- },
48
- "/raw": {
49
- "post": {
50
- "tags": [
51
- "service"
52
- ],
53
- "summary": "Brut (RAW)",
54
- "description": "Retourne le buffer brut de l’image en base64.",
55
- "parameters": [
56
- {
57
- "name": "content",
58
- "required": true,
59
- "schema": {
60
- "type": "string"
61
- }
83
+ }
84
+ },
85
+ "/stats": {
86
+ "post": {
87
+ "tags": [
88
+ "service"
89
+ ],
90
+ "summary": "Statistiques",
91
+ "description": "Retourne des statistiques sur l’image comme la moyenne ou l’écart-type.",
92
+ "parameters": [
93
+ {
94
+ "name": "content",
95
+ "required": true,
96
+ "schema": {
97
+ "type": "string"
62
98
  }
63
- ]
64
- }
65
- },
66
- "/resize": {
67
- "post": {
68
- "tags": [
69
- "service"
70
- ],
71
- "summary": "Redimensionner",
72
- "description": "Redimensionne l’image selon la largeur et la hauteur spécifiées.",
73
- "parameters": [
74
- {
75
- "name": "content",
76
- "required": true,
77
- "schema": {
78
- "type": "string"
79
- }
80
- },
81
- {
82
- "name": "width",
83
- "required": true,
84
- "schema": {
85
- "type": "number"
86
- }
87
- },
88
- {
89
- "name": "height",
90
- "required": true,
91
- "schema": {
92
- "type": "number"
93
- }
94
- },
95
- {
96
- "name": "options",
97
- "required": false,
98
- "schema": {
99
- "type": "object"
99
+ }
100
+ ],
101
+ "responses": {
102
+ "200": {
103
+ "description": "Objet de statistiques de l'image",
104
+ "content": {
105
+ "application/json": {
106
+ "schema": {
107
+ "type": "object",
108
+ "properties": {
109
+ "channels": {
110
+ "type": "array",
111
+ "items": {
112
+ "type": "object",
113
+ "properties": {
114
+ "min": {
115
+ "type": "number",
116
+ "description": "Valeur de pixel minimale"
117
+ },
118
+ "max": {
119
+ "type": "number",
120
+ "description": "Valeur de pixel maximale"
121
+ },
122
+ "sum": {
123
+ "type": "number",
124
+ "description": "Somme de toutes les valeurs de pixels"
125
+ },
126
+ "squaresSum": {
127
+ "type": "number",
128
+ "description": "Somme des valeurs de pixels au carré"
129
+ },
130
+ "mean": {
131
+ "type": "number",
132
+ "description": "Valeur moyenne des pixels"
133
+ },
134
+ "stdev": {
135
+ "type": "number",
136
+ "description": "Écart-type des valeurs de pixels"
137
+ }
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
100
143
  }
101
144
  }
102
- ]
145
+ }
103
146
  }
104
- },
105
- "/rotate": {
106
- "post": {
107
- "tags": [
108
- "service"
109
- ],
110
- "summary": "Rotation",
111
- "description": "Fait pivoter l’image (angle optionnel, utilise EXIF si absent).",
112
- "parameters": [
113
- {
114
- "name": "content",
115
- "required": true,
116
- "schema": {
117
- "type": "string"
118
- }
119
- },
120
- {
121
- "name": "angle",
122
- "required": false,
123
- "schema": {
124
- "type": "number"
125
- }
147
+ }
148
+ },
149
+ "/raw": {
150
+ "post": {
151
+ "tags": [
152
+ "service"
153
+ ],
154
+ "summary": "Brut (RAW)",
155
+ "description": "Retourne le buffer brut de l’image en base64.",
156
+ "parameters": [
157
+ {
158
+ "name": "content",
159
+ "required": true,
160
+ "schema": {
161
+ "type": "string"
126
162
  }
127
- ]
128
- }
129
- },
130
- "/extract": {
131
- "post": {
132
- "tags": [
133
- "service"
134
- ],
135
- "summary": "Rogner",
136
- "description": "Extrait une portion de limage.",
137
- "parameters": [
138
- {
139
- "name": "content",
140
- "required": true,
141
- "schema": {
142
- "type": "string"
143
- }
144
- },
145
- {
146
- "name": "left",
147
- "required": true,
148
- "schema": {
149
- "type": "number"
150
- }
151
- },
152
- {
153
- "name": "top",
154
- "required": true,
155
- "schema": {
156
- "type": "number"
157
- }
158
- },
159
- {
160
- "name": "width",
161
- "required": true,
162
- "schema": {
163
- "type": "number"
164
- }
165
- },
166
- {
167
- "name": "height",
168
- "required": true,
169
- "schema": {
170
- "type": "number"
163
+ }
164
+ ],
165
+ "responses": {
166
+ "200": {
167
+ "description": "Buffer brut de l'image en base64 (sans préfixe data URL)",
168
+ "content": {
169
+ "application/json": {
170
+ "schema": {
171
+ "type": "string",
172
+ "description": "Buffer brut de l'image encodé en base64"
173
+ }
171
174
  }
172
175
  }
173
- ]
176
+ }
174
177
  }
175
- },
176
- "/flip": {
177
- "post": {
178
- "tags": [
179
- "service"
180
- ],
181
- "summary": "Miroir vertical",
182
- "description": "Retourne l’image verticalement.",
183
- "parameters": [
184
- {
185
- "name": "content",
186
- "required": true,
187
- "schema": {
188
- "type": "string"
189
- }
178
+ }
179
+ },
180
+ "/resize": {
181
+ "post": {
182
+ "tags": [
183
+ "service"
184
+ ],
185
+ "summary": "Redimensionner",
186
+ "description": "Redimensionne l’image selon la largeur et la hauteur spécifiées.",
187
+ "parameters": [
188
+ {
189
+ "name": "content",
190
+ "required": true,
191
+ "schema": {
192
+ "type": "string"
190
193
  }
191
- ]
192
- }
193
- },
194
- "/flop": {
195
- "post": {
196
- "tags": [
197
- "service"
198
- ],
199
- "summary": "Miroir horizontal",
200
- "description": "Retourne l’image horizontalement.",
201
- "parameters": [
202
- {
203
- "name": "content",
204
- "required": true,
205
- "schema": {
206
- "type": "string"
207
- }
194
+ },
195
+ {
196
+ "name": "width",
197
+ "required": true,
198
+ "schema": {
199
+ "type": "number"
208
200
  }
209
- ]
210
- }
211
- },
212
- "/grayscale": {
213
- "post": {
214
- "tags": [
215
- "service"
216
- ],
217
- "summary": "Niveaux de gris",
218
- "description": "Convertit l’image en niveaux de gris.",
219
- "parameters": [
220
- {
221
- "name": "content",
222
- "required": true,
223
- "schema": {
224
- "type": "string"
225
- }
201
+ },
202
+ {
203
+ "name": "height",
204
+ "required": true,
205
+ "schema": {
206
+ "type": "number"
226
207
  }
227
- ]
228
- }
229
- },
230
- "/linear": {
231
- "post": {
232
- "tags": [
233
- "service"
234
- ],
235
- "summary": "Linéaire",
236
- "description": "Applique une transformation linéaire à l’image.",
237
- "parameters": [
238
- {
239
- "name": "content",
240
- "required": true,
241
- "schema": {
242
- "type": "string"
243
- }
244
- },
245
- {
246
- "name": "multiplier",
247
- "required": true,
248
- "schema": {
249
- "type": "number"
250
- }
251
- },
252
- {
253
- "name": "offset",
254
- "required": true,
255
- "schema": {
256
- "type": "number"
257
- }
208
+ },
209
+ {
210
+ "name": "options",
211
+ "required": false,
212
+ "schema": {
213
+ "type": "object"
258
214
  }
259
- ]
260
- }
261
- },
262
- "/threshold": {
263
- "post": {
264
- "tags": [
265
- "service"
266
- ],
267
- "summary": "Seuil",
268
- "description": "Applique un seuil à l’image pour la convertir en noir et blanc.",
269
- "parameters": [
270
- {
271
- "name": "content",
272
- "required": true,
273
- "schema": {
274
- "type": "string"
275
- }
276
- },
277
- {
278
- "name": "level",
279
- "required": false,
280
- "schema": {
281
- "type": "number",
282
- "default": 128
283
- }
284
- },
285
- {
286
- "name": "option",
287
- "required": false,
288
- "schema": {
289
- "type": "object"
290
- }
215
+ }
216
+ ]
217
+ }
218
+ },
219
+ "/rotate": {
220
+ "post": {
221
+ "tags": [
222
+ "service"
223
+ ],
224
+ "summary": "Rotation",
225
+ "description": "Fait pivoter l’image (angle optionnel, utilise EXIF si absent).",
226
+ "parameters": [
227
+ {
228
+ "name": "content",
229
+ "required": true,
230
+ "schema": {
231
+ "type": "string"
291
232
  }
292
- ]
293
- }
294
- },
295
- "/tint": {
296
- "post": {
297
- "tags": [
298
- "service"
299
- ],
300
- "summary": "Teinte",
301
- "description": "Applique une teinte colorée à l’image.",
302
- "parameters": [
303
- {
304
- "name": "content",
305
- "required": true,
306
- "schema": {
307
- "type": "string"
308
- }
309
- },
310
- {
311
- "name": "r",
312
- "required": true,
313
- "schema": {
314
- "type": "number"
315
- }
316
- },
317
- {
318
- "name": "g",
319
- "required": true,
320
- "schema": {
321
- "type": "number"
322
- }
323
- },
324
- {
325
- "name": "b",
326
- "required": true,
327
- "schema": {
328
- "type": "number"
329
- }
233
+ },
234
+ {
235
+ "name": "angle",
236
+ "required": false,
237
+ "schema": {
238
+ "type": "number"
330
239
  }
331
- ]
332
- }
333
- },
334
- "/modulate": {
335
- "post": {
336
- "tags": [
337
- "service"
338
- ],
339
- "summary": "Modulation",
340
- "description": "Ajuste la luminosité, la saturation et la teinte.",
341
- "parameters": [
342
- {
343
- "name": "content",
344
- "required": true,
345
- "schema": {
346
- "type": "string"
347
- }
348
- },
349
- {
350
- "name": "brightness",
351
- "required": false,
352
- "schema": {
353
- "type": "number"
354
- }
355
- },
356
- {
357
- "name": "saturation",
358
- "required": false,
359
- "schema": {
360
- "type": "number"
361
- }
362
- },
363
- {
364
- "name": "hue",
365
- "required": false,
366
- "schema": {
367
- "type": "number"
368
- }
240
+ }
241
+ ]
242
+ }
243
+ },
244
+ "/extract": {
245
+ "post": {
246
+ "tags": [
247
+ "service"
248
+ ],
249
+ "summary": "Rogner",
250
+ "description": "Extrait une portion de l’image.",
251
+ "parameters": [
252
+ {
253
+ "name": "content",
254
+ "required": true,
255
+ "schema": {
256
+ "type": "string"
369
257
  }
370
- ]
371
- }
372
- },
373
- "/blur": {
374
- "post": {
375
- "tags": [
376
- "service"
377
- ],
378
- "summary": "Flou",
379
- "description": "Applique un flou à l’image.",
380
- "parameters": [
381
- {
382
- "name": "content",
383
- "required": true,
384
- "schema": {
385
- "type": "string"
386
- }
387
- },
388
- {
389
- "name": "radius",
390
- "required": false,
391
- "schema": {
392
- "type": "number"
393
- }
258
+ },
259
+ {
260
+ "name": "left",
261
+ "required": true,
262
+ "schema": {
263
+ "type": "number"
394
264
  }
395
- ]
396
- }
397
- },
398
- "/sharpen": {
399
- "post": {
400
- "tags": [
401
- "service"
402
- ],
403
- "summary": "Netteté",
404
- "description": "Accentue les contours de l’image.",
405
- "parameters": [
406
- {
407
- "name": "content",
408
- "required": true,
409
- "schema": {
410
- "type": "string"
411
- }
265
+ },
266
+ {
267
+ "name": "top",
268
+ "required": true,
269
+ "schema": {
270
+ "type": "number"
412
271
  }
413
- ]
414
- }
415
- },
416
- "/toFormat": {
417
- "post": {
418
- "tags": [
419
- "service"
420
- ],
421
- "summary": "Conversion de format",
422
- "description": "Convertit l’image vers un autre format.",
423
- "parameters": [
424
- {
425
- "name": "content",
426
- "required": true,
427
- "schema": {
428
- "type": "string"
429
- }
430
- },
431
- {
432
- "name": "format",
433
- "required": true,
434
- "description": "jpeg, png, webp, avif",
435
- "schema": {
436
- "type": "string",
437
- "enum": [
438
- "jpeg",
439
- "png",
440
- "webp",
441
- "avif"
442
- ]
443
- }
272
+ },
273
+ {
274
+ "name": "width",
275
+ "required": true,
276
+ "schema": {
277
+ "type": "number"
444
278
  }
445
- ]
446
- }
447
- },
448
- "/jpeg": {
449
- "post": {
450
- "tags": [
451
- "service"
452
- ],
453
- "summary": "Exporter en JPEG",
454
- "description": "Convertit l’image en format JPEG avec qualité personnalisable.",
455
- "parameters": [
456
- {
457
- "name": "content",
458
- "required": true,
459
- "schema": {
460
- "type": "string"
461
- }
462
- },
463
- {
464
- "name": "quality",
465
- "required": false,
466
- "schema": {
467
- "type": "number",
468
- "default": 80
469
- }
279
+ },
280
+ {
281
+ "name": "height",
282
+ "required": true,
283
+ "schema": {
284
+ "type": "number"
470
285
  }
471
- ]
472
- }
473
- },
474
- "/png": {
475
- "post": {
476
- "tags": [
477
- "service"
478
- ],
479
- "summary": "Exporter en PNG",
480
- "description": "Convertit l’image en format PNG avec niveau de compression personnalisé.",
481
- "parameters": [
482
- {
483
- "name": "content",
484
- "required": true,
485
- "schema": {
486
- "type": "string"
487
- }
488
- },
489
- {
490
- "name": "compressionLevel",
491
- "required": false,
492
- "schema": {
493
- "type": "number",
494
- "default": 6
495
- }
286
+ }
287
+ ]
288
+ }
289
+ },
290
+ "/flip": {
291
+ "post": {
292
+ "tags": [
293
+ "service"
294
+ ],
295
+ "summary": "Miroir vertical",
296
+ "description": "Retourne l’image verticalement.",
297
+ "parameters": [
298
+ {
299
+ "name": "content",
300
+ "required": true,
301
+ "schema": {
302
+ "type": "string"
496
303
  }
497
- ]
498
- }
499
- },
500
- "/webp": {
501
- "post": {
502
- "tags": [
503
- "service"
504
- ],
505
- "summary": "Exporter en WebP",
506
- "description": "Convertit l’image en format WebP avec qualité personnalisable.",
507
- "parameters": [
508
- {
509
- "name": "content",
510
- "required": true,
511
- "schema": {
512
- "type": "string"
513
- }
514
- },
515
- {
516
- "name": "quality",
517
- "required": false,
518
- "schema": {
519
- "type": "number",
520
- "default": 80
521
- }
304
+ }
305
+ ]
306
+ }
307
+ },
308
+ "/flop": {
309
+ "post": {
310
+ "tags": [
311
+ "service"
312
+ ],
313
+ "summary": "Miroir horizontal",
314
+ "description": "Retourne l’image horizontalement.",
315
+ "parameters": [
316
+ {
317
+ "name": "content",
318
+ "required": true,
319
+ "schema": {
320
+ "type": "string"
522
321
  }
523
- ]
524
- }
525
- },
526
- "/avif": {
527
- "post": {
528
- "tags": [
529
- "service"
530
- ],
531
- "summary": "Exporter en AVIF",
532
- "description": "Convertit l’image en format AVIF avec qualité personnalisable.",
533
- "parameters": [
534
- {
535
- "name": "content",
536
- "required": true,
537
- "schema": {
538
- "type": "string"
539
- }
540
- },
541
- {
542
- "name": "quality",
543
- "required": false,
544
- "schema": {
545
- "type": "number",
546
- "default": 50
547
- }
322
+ }
323
+ ]
324
+ }
325
+ },
326
+ "/autoOrient": {
327
+ "post": {
328
+ "tags": [
329
+ "service"
330
+ ],
331
+ "summary": "Orientation automatique",
332
+ "description": "Corrige l’orientation de l’image en fonction des métadonnées EXIF.",
333
+ "parameters": [
334
+ {
335
+ "name": "content",
336
+ "required": true,
337
+ "schema": {
338
+ "type": "string"
548
339
  }
549
- ]
550
- }
551
- },
552
- "/composite": {
553
- "post": {
554
- "tags": [
555
- "service"
556
- ],
557
- "summary": "Superposition",
558
- "description": "Superpose une ou plusieurs images (ex. : watermark).",
559
- "parameters": [
560
- {
561
- "name": "content",
562
- "required": true,
563
- "schema": {
564
- "type": "string"
565
- }
566
- },
567
- {
568
- "name": "overlays",
569
- "required": true,
570
- "description": "Liste d’éléments { input (base64), top, left }",
571
- "schema": {
572
- "type": "array",
573
- "items": {
574
- "type": "object",
575
- "properties": {
576
- "input": {
577
- "type": "string"
578
- },
579
- "top": {
580
- "type": "number"
581
- },
582
- "left": {
583
- "type": "number"
584
- }
340
+ }
341
+ ]
342
+ }
343
+ },
344
+ "/grayscale": {
345
+ "post": {
346
+ "tags": [
347
+ "service"
348
+ ],
349
+ "summary": "Niveaux de gris",
350
+ "description": "Convertit l’image en niveaux de gris.",
351
+ "parameters": [
352
+ {
353
+ "name": "content",
354
+ "required": true,
355
+ "schema": {
356
+ "type": "string"
357
+ }
358
+ }
359
+ ]
360
+ }
361
+ },
362
+ "/linear": {
363
+ "post": {
364
+ "tags": [
365
+ "service"
366
+ ],
367
+ "summary": "Linéaire",
368
+ "description": "Applique une transformation linéaire à l’image.",
369
+ "parameters": [
370
+ {
371
+ "name": "content",
372
+ "required": true,
373
+ "schema": {
374
+ "type": "string"
375
+ }
376
+ },
377
+ {
378
+ "name": "multiplier",
379
+ "required": true,
380
+ "schema": {
381
+ "type": "number"
382
+ }
383
+ },
384
+ {
385
+ "name": "offset",
386
+ "required": true,
387
+ "schema": {
388
+ "type": "number"
389
+ }
390
+ }
391
+ ]
392
+ }
393
+ },
394
+ "/threshold": {
395
+ "post": {
396
+ "tags": [
397
+ "service"
398
+ ],
399
+ "summary": "Seuil",
400
+ "description": "Applique un seuil à l’image pour la convertir en noir et blanc.",
401
+ "parameters": [
402
+ {
403
+ "name": "content",
404
+ "required": true,
405
+ "schema": {
406
+ "type": "string"
407
+ }
408
+ },
409
+ {
410
+ "name": "level",
411
+ "required": false,
412
+ "schema": {
413
+ "type": "number",
414
+ "default": 128
415
+ }
416
+ },
417
+ {
418
+ "name": "option",
419
+ "required": false,
420
+ "schema": {
421
+ "type": "object"
422
+ }
423
+ }
424
+ ]
425
+ }
426
+ },
427
+ "/tint": {
428
+ "post": {
429
+ "tags": [
430
+ "service"
431
+ ],
432
+ "summary": "Teinte",
433
+ "description": "Applique une teinte colorée à l’image.",
434
+ "parameters": [
435
+ {
436
+ "name": "content",
437
+ "required": true,
438
+ "schema": {
439
+ "type": "string"
440
+ }
441
+ },
442
+ {
443
+ "name": "r",
444
+ "required": true,
445
+ "schema": {
446
+ "type": "number"
447
+ }
448
+ },
449
+ {
450
+ "name": "g",
451
+ "required": true,
452
+ "schema": {
453
+ "type": "number"
454
+ }
455
+ },
456
+ {
457
+ "name": "b",
458
+ "required": true,
459
+ "schema": {
460
+ "type": "number"
461
+ }
462
+ }
463
+ ]
464
+ }
465
+ },
466
+ "/modulate": {
467
+ "post": {
468
+ "tags": [
469
+ "service"
470
+ ],
471
+ "summary": "Modulation",
472
+ "description": "Ajuste la luminosité, la saturation et la teinte.",
473
+ "parameters": [
474
+ {
475
+ "name": "content",
476
+ "required": true,
477
+ "schema": {
478
+ "type": "string"
479
+ }
480
+ },
481
+ {
482
+ "name": "brightness",
483
+ "required": false,
484
+ "schema": {
485
+ "type": "number"
486
+ }
487
+ },
488
+ {
489
+ "name": "saturation",
490
+ "required": false,
491
+ "schema": {
492
+ "type": "number"
493
+ }
494
+ },
495
+ {
496
+ "name": "hue",
497
+ "required": false,
498
+ "schema": {
499
+ "type": "number"
500
+ }
501
+ }
502
+ ]
503
+ }
504
+ },
505
+ "/blur": {
506
+ "post": {
507
+ "tags": [
508
+ "service"
509
+ ],
510
+ "summary": "Flou",
511
+ "description": "Applique un flou à l’image.",
512
+ "parameters": [
513
+ {
514
+ "name": "content",
515
+ "required": true,
516
+ "schema": {
517
+ "type": "string"
518
+ }
519
+ },
520
+ {
521
+ "name": "radius",
522
+ "required": false,
523
+ "schema": {
524
+ "type": "number"
525
+ }
526
+ }
527
+ ]
528
+ }
529
+ },
530
+ "/sharpen": {
531
+ "post": {
532
+ "tags": [
533
+ "service"
534
+ ],
535
+ "summary": "Netteté",
536
+ "description": "Accentue les contours de l’image.",
537
+ "parameters": [
538
+ {
539
+ "name": "content",
540
+ "required": true,
541
+ "schema": {
542
+ "type": "string"
543
+ }
544
+ }
545
+ ]
546
+ }
547
+ },
548
+ "/toFormat": {
549
+ "post": {
550
+ "tags": [
551
+ "service"
552
+ ],
553
+ "summary": "Conversion de format",
554
+ "description": "Convertit l’image vers un autre format.",
555
+ "parameters": [
556
+ {
557
+ "name": "content",
558
+ "required": true,
559
+ "schema": {
560
+ "type": "string"
561
+ }
562
+ },
563
+ {
564
+ "name": "format",
565
+ "required": true,
566
+ "description": "jpeg, png, webp, avif",
567
+ "schema": {
568
+ "type": "string",
569
+ "enum": [
570
+ "jpeg",
571
+ "png",
572
+ "webp",
573
+ "avif"
574
+ ]
575
+ }
576
+ }
577
+ ]
578
+ }
579
+ },
580
+ "/jpeg": {
581
+ "post": {
582
+ "tags": [
583
+ "service"
584
+ ],
585
+ "summary": "Exporter en JPEG",
586
+ "description": "Convertit l’image en format JPEG avec qualité personnalisable.",
587
+ "parameters": [
588
+ {
589
+ "name": "content",
590
+ "required": true,
591
+ "schema": {
592
+ "type": "string"
593
+ }
594
+ },
595
+ {
596
+ "name": "quality",
597
+ "required": false,
598
+ "schema": {
599
+ "type": "number",
600
+ "default": 80
601
+ }
602
+ }
603
+ ]
604
+ }
605
+ },
606
+ "/png": {
607
+ "post": {
608
+ "tags": [
609
+ "service"
610
+ ],
611
+ "summary": "Exporter en PNG",
612
+ "description": "Convertit l’image en format PNG avec niveau de compression personnalisé.",
613
+ "parameters": [
614
+ {
615
+ "name": "content",
616
+ "required": true,
617
+ "schema": {
618
+ "type": "string"
619
+ }
620
+ },
621
+ {
622
+ "name": "compressionLevel",
623
+ "required": false,
624
+ "schema": {
625
+ "type": "number",
626
+ "default": 6
627
+ }
628
+ }
629
+ ]
630
+ }
631
+ },
632
+ "/webp": {
633
+ "post": {
634
+ "tags": [
635
+ "service"
636
+ ],
637
+ "summary": "Exporter en WebP",
638
+ "description": "Convertit l’image en format WebP avec qualité personnalisable.",
639
+ "parameters": [
640
+ {
641
+ "name": "content",
642
+ "required": true,
643
+ "schema": {
644
+ "type": "string"
645
+ }
646
+ },
647
+ {
648
+ "name": "quality",
649
+ "required": false,
650
+ "schema": {
651
+ "type": "number",
652
+ "default": 80
653
+ }
654
+ }
655
+ ]
656
+ }
657
+ },
658
+ "/avif": {
659
+ "post": {
660
+ "tags": [
661
+ "service"
662
+ ],
663
+ "summary": "Exporter en AVIF",
664
+ "description": "Convertit l’image en format AVIF avec qualité personnalisable.",
665
+ "parameters": [
666
+ {
667
+ "name": "content",
668
+ "required": true,
669
+ "schema": {
670
+ "type": "string"
671
+ }
672
+ },
673
+ {
674
+ "name": "quality",
675
+ "required": false,
676
+ "schema": {
677
+ "type": "number",
678
+ "default": 50
679
+ }
680
+ }
681
+ ]
682
+ }
683
+ },
684
+ "/composite": {
685
+ "post": {
686
+ "tags": [
687
+ "service"
688
+ ],
689
+ "summary": "Superposition",
690
+ "description": "Superpose une ou plusieurs images (ex. : watermark).",
691
+ "parameters": [
692
+ {
693
+ "name": "content",
694
+ "required": true,
695
+ "schema": {
696
+ "type": "string"
697
+ }
698
+ },
699
+ {
700
+ "name": "overlays",
701
+ "required": true,
702
+ "description": "Liste d’éléments { input (base64), top, left }",
703
+ "schema": {
704
+ "type": "array",
705
+ "items": {
706
+ "type": "object",
707
+ "properties": {
708
+ "input": {
709
+ "type": "string"
710
+ },
711
+ "top": {
712
+ "type": "number"
585
713
  },
586
- "required": [
587
- "input",
588
- "top",
589
- "left"
590
- ]
714
+ "left": {
715
+ "type": "number"
716
+ }
717
+ },
718
+ "required": [
719
+ "input",
720
+ "top",
721
+ "left"
722
+ ]
723
+ }
724
+ }
725
+ }
726
+ ],
727
+ "responses": {
728
+ "200": {
729
+ "description": "Image composite avec superpositions en data URL base64",
730
+ "content": {
731
+ "application/json": {
732
+ "schema": {
733
+ "type": "string",
734
+ "description": "Image encodée en base64 avec préfixe data URL"
591
735
  }
592
736
  }
593
737
  }
594
- ]
738
+ }
595
739
  }
596
740
  }
597
- },
598
- "components": {
599
- "schemas": {}
600
- },
601
- "x-scene-blocks": {}
741
+ }
742
+ },
743
+ "components": {
744
+ "schemas": {
745
+ "ImageResponse": {
746
+ "type": "string",
747
+ "description": "Image encodée en base64 avec préfixe data URL"
748
+ }
749
+ }
750
+ },
751
+ "x-scene-blocks": {}
602
752
  }