Bonjour à tous.
Je réalise une appli de traitement d'image dont le fonctionnement (en résumant) est le suivant :
- j'applique des filtres sur une photo coté client en javascript
- j'enregistre en bdd les filtres qu'il a appliqué
- un script applique les mêmes filtres coté serveur sur la même image mais en plus grand résolution.
Tout fonctionne bien, sauf que le script coté serveur est vraiment très, très lent ! Il lui faut plus de 1 min pour effectuer le traitement, alors que la résolution de l'image n'est pas non plus enorme (1843x1252) et que je suis sur un serveur dédié (avec ssd).
Et ce qui est étrange c'est que 1 filtre = ~60s mais 2 filtres sur la même images est à peine plus long.
Les algos des filtres sont normalement bons, je les ai transposé de javascript à php.
Je me demande donc si je ne les applique pas d'une mauvaise façon ?
voici pour exemple le code d'un filtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public function vibrance($fVibrance) { for($x = 0; $x < $this->w; ++$x) { for($y = 0; $y < $this->h; ++$y) { $rgb = imagecolorat($this->image, $x, $y); $colors = imagecolorsforindex($this->image, $rgb); $iR = $colors['red']; $iG = $colors['green']; $iB = $colors['blue']; $max = max($iR, $iG, $iB); $avg = ($iR + $iG + $iB) / 3; $amt = ((abs($max - $avg) * 2 / 255) * $fVibrance) / 100; if ($iR !== $max) $iR += ($max - $iR) * $amt; if ($iG !== $max) $iG += ($max - $iG) * $amt; if ($iB !== $max) $iB += ($max - $iB) * $amt; $iR = $iR < 0 ?0:($iR > 255 ?255:$iR); $iG = $iG < 0 ?0:($iG > 255 ?255:$iG); $iB = $iB < 0 ?0:($iB > 255 ?255:$iB); $color = imagecolorallocate ($this->image, $iR ,$iG ,$iB ); imagesetpixel($this->image, $x, $y, $color); } } }
Partager