Equivalence filtre css et librairie GD

Equivalence filtre css et librairie GD - PHP - Programmation

Marsh Posté le 27-10-2017 à 09:57:24    

Bonjour,


Message édité par snike le 27-10-2017 à 11:14:04
Reply

Marsh Posté le 27-10-2017 à 09:57:24   

Reply

Marsh Posté le 27-10-2017 à 11:13:39    

Bonjour,
 
  Je cherche à générer des images via GD ç partir des filtres css du style :

Code :
  1. filter: sepia(0.5) hue-rotate(-30deg) saturate(1.2) contrast(0.8); // ig-1977


 
  Sauf erreur de ma part, il n'y a pas directement dans GD de filtre sepia, hue-rotate et saturate, j'ai donc trouvé des équivalences mais le résultat n'est pas le même.
 

Code :
  1. $nom_fichier='test.JPG';
  2.   $image = @imagecreatefromjpeg($nom_fichier);
  3.   sepia($image,0.5); // sepia(0.5)
  4.   imagehue($image, -30); // hue-rotate(-30deg)
  5.   imageSaturation($image, 20); // saturate(1.2)
  6.   imagefilter($image,IMG_FILTER_CONTRAST,190); //contrast(0.8)
  7.   imagejpeg($image,"toto.jpg" );
  8.   imagedestroy($image);
  9.   // filter: sepia(0.5) hue-rotate(-30deg) saturate(1.2) contrast(0.8);
  10. // Filtre Sépia
  11. // Source : http://php.net/manual/fr/function.imagefilter.php
  12. function sepia(&$image,$p) {
  13.   imagefilter($image,IMG_FILTER_GRAYSCALE,255*$p);
  14.  imagefilter($image,IMG_FILTER_BRIGHTNESS,(-30/255)*$p);
  15.  imagefilter($image,IMG_FILTER_COLORIZE, (90/255)*$p, (55/255)*$p, (30/255)*$p);
  16. }
  17. // Filtre hue-rotate
  18. // Source : https://stackoverflow.com/questions [...] gd-library
  19. function imagehue(&$image, $angle) {
  20.  if ($angle % 360 == 0) return;
  21.   $width = imagesx($image);
  22.   $height = imagesy($image);
  23.   for($x = 0; $x < $width; $x++) {
  24.   for($y = 0; $y < $height; $y++) {
  25.    $rgb = imagecolorat($image, $x, $y);
  26.    $r = ($rgb >> 16) & 0xFF;
  27.    $g = ($rgb >> 8) & 0xFF;
  28.    $b = $rgb & 0xFF;
  29.    $alpha = ($rgb & 0x7F000000) >> 24;
  30.    list($h, $s, $l) = rgb2hsl($r, $g, $b);
  31.    $h += $angle / 360;
  32.    if($h > 1) $h--;
  33.    list($r, $g, $b) = hsl2rgb($h, $s, $l);
  34.    imagesetpixel($image, $x, $y, imagecolorallocatealpha($image, $r, $g, $b, $alpha));
  35.   }
  36.  }
  37. }
  38. // Filtre saturate  
  39. function imageSaturation(&$image, $saturationPercentage) {
  40.  $width = imagesx($image);
  41.  $height = imagesy($image);
  42.  for($x = 0; $x < $width; $x++) {
  43.   for($y = 0; $y < $height; $y++) {
  44.    $rgb = imagecolorat($image, $x, $y);
  45.    $r = ($rgb >> 16) & 0xFF;
  46.    $g = ($rgb >> 8) & 0xFF;
  47.    $b = $rgb & 0xFF;
  48.    $alpha = ($rgb & 0x7F000000) >> 24;
  49.    list($h, $s, $l) = rgb2hsl($r, $g, $b);
  50.    $s = $s * (100 + $saturationPercentage ) /100;
  51.    if($s > 1) $s = 1;
  52.    list($r, $g, $b) = hsl2rgb($h, $s, $l);
  53.    imagesetpixel($image, $x, $y, imagecolorallocatealpha($image, $r, $g, $b, $alpha));
  54.   }
  55.  }
  56. }


 
Avez-vous des meilleurs scripts ?
 
Merci par avance.

Reply

Marsh Posté le 27-10-2017 à 12:16:25    

Bonjour,
 
  Il y a peut être une possibilité avec ImageMajick ?
 
Cordialement

Reply

Marsh Posté le 29-10-2017 à 12:05:07    

Bonjour,

 

Les matrices de transformation sont disponibles dans les specs du css (sépia, hue-rotate et saturation) :
https://www.w3.org/TR/filter-effect [...] rixElement
https://www.w3.org/TR/filter-effects-1/#sepiaEquivalent
https://www.w3.org/TR/filter-effect [...] Equivalent
https://www.w3.org/TR/filter-effect [...] Equivalent

 

Et pour le contraste :
https://www.w3.org/TR/filter-effect [...] ferElement
https://www.w3.org/TR/filter-effect [...] Equivalent

 


Il faut bien comprendre que ces effets sont subjectifs, à chacun de les définir.


Message édité par MaybeEijOrNot le 29-10-2017 à 12:06:10

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 29-10-2017 à 14:50:16    

Bonjour,
 
  Merci.
  Quel est le lien entre ces matrices et la librairie GD ?
  Il y a une fonction imageconvolution mais la matrice est 3x3.
 
Cordialement

Reply

Marsh Posté le 29-10-2017 à 16:40:46    

Aucun lien (direct) avec la librairie GD, simplement comme les effets sont au bon vouloir de chacun il est possible que tu ne trouves aucun script faisant pareil que CSS. Du coup je te donne de quoi comparer ou les bonnes bases si tu souhaites coder toi-même ces effets, ce qui est faisable avec GD a priori.


Message édité par MaybeEijOrNot le 29-10-2017 à 16:41:42

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 29-10-2017 à 18:20:41    

Ok, merci pour tes renseignements, je vais voir comment faire.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed