Posted By

laurikar on 04/04/13


Tagged

php color photoshop RGB overlay


Versions (?)

Photoshop overlay blending with opacity in PHP


 / Published in: PHP
 

This function mimics Photoshop overlay blending by accepting two RGB arrays, one which will be overlayed and one which will overlay. Opacity is optional.

  1. /**
  2.  * Overlay blending
  3.  *
  4.  * This function mimics Photoshop overlay blending mode by accepting two RGB arrays,
  5.  * one which will be overlayed and one which will overlay. The exact equation for overlay
  6.  * is not known, however Kevin Jensen has a pretty accurate equation available on his website.
  7.  * Please see http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/
  8.  *
  9.  * @param array $bottom Color to be overlayed formatted as RGB array, i.e. for red array(255, 0, 0)
  10.  * @param array $top Color which overlays $bottom formatted as RGB array, i.e. for white array(255, 255, 255)
  11.  * @param float $opacity Optional opacity to be applied to the overlayed color in relation to $bottom
  12.  *
  13.  * @return array Color resulted in overlaying formatted as RGB array
  14.  */
  15. function blend_overlay($bottom, $top, $opacity = NULL) {
  16. // Overlay $bottom with $top
  17. $overlay = array();
  18. foreach ($bottom as $i => $a) {
  19. $b = $top[$i];
  20. if ($a < 128) {
  21. $overlay[$i] = (int) (2 * $b * $a / 255);
  22. } else {
  23. $overlay[$i] = (int) (255 * (1 - 2 * (1 - $b / 255) * (1 - $a / 255)));
  24. }
  25. }
  26.  
  27. // Apply opacity to $overlay in relation to $bottom
  28. if (isset($opacity)) {
  29. foreach ($overlay as $i => $b) {
  30. $a = $bottom[$i];
  31. $overlay[$i] = (int) ((1 - $opacity) * $a + $opacity * $b);
  32. }
  33. }
  34.  
  35. return $overlay;
  36. }

Report this snippet  

You need to login to post a comment.