Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. <?php
  2.  
  3. **
  4. * Estimate image sharpnes based on color
  5. * similarity in pixels in a grid.
  6. *
  7. * @param Imagick $img
  8. * @return float
  9. */
  10. function GetImageSharpness($img)
  11. {
  12.  
  13. $w = $img->getImageWidth();
  14. $h = $img->getImageHeight();
  15. $grid = $w / 9;
  16. $maximum = 0;
  17.  
  18. for ($x = $grid / 2; $x <= $w - $grid / 2; $x += $grid) {
  19.  
  20. $pixel = $img->getImagePixelColor($x, $grid / 2)->getColor();
  21. $r = $pixel['r'];
  22. $g = $pixel['g'];
  23. $b = $pixel['b'];
  24. $v0 = floor(0.35 * $r + 0.50 * $g + 0.15 * $b);
  25. for ($y = $grid / 2 + 1; $y <= $h - $grid / 2; $y++) {
  26. $pixel = $img->getImagePixelColor($x, $y)->getColor();
  27. $r = $pixel['r'];
  28. $g = $pixel['g'];
  29. $b = $pixel['b'];
  30. $v = floor(0.35 * $r + 0.50 * $g + 0.15 * $b);
  31. if ($maximum < abs($v - $v0)) {
  32. $maximum = abs($v - $v0);
  33. $xmax = $x;
  34. $ymax = $y;
  35. }
  36. $v0 = $v;
  37. }
  38. }
  39.  
  40. for ($y = $grid / 2; $y <= $h - $grid / 2; $y += $grid) {
  41. $pixel = $img->getImagePixelColor($grid / 2, $y)->getColor();
  42. $r = $pixel['r'];
  43. $g = $pixel['g'];
  44. $b = $pixel['b'];
  45. $v0 = floor(0.35 * $r + 0.50 * $g + 0.15 * $b);
  46. for ($x = $grid / 2 + 1; $x <= $w - $grid / 2; $x++) {
  47. $pixel = $img->getImagePixelColor($x, $y)->getColor();
  48. $r = $pixel['r'];
  49. $g = $pixel['g'];
  50. $b = $pixel['b'];
  51. $v = floor(0.35 * $r + 0.50 * $g + 0.15 * $b);
  52. if ($maximum < abs($v - $v0)) {
  53. $maximum = abs($v - $v0);
  54. $xmax = $x;
  55. $ymax = $y;
  56. }
  57. $v0 = $v;
  58. }
  59. }
  60.  
  61. $maxv = 0;
  62. $minv = 255;
  63. for ($x = $xmax - 4; $x <= $xmax + 4; $x++) {
  64. for ($y = $ymax - 4; $y <= $ymax + 4; $y++) {
  65. $pixel = $img->getImagePixelColor($x, $y)->getColor();
  66. $r = $pixel['r'];
  67. $g = $pixel['g'];
  68. $b = $pixel['b'];
  69. $v = floor(0.35 * $r + 0.50 * $g + 0.15 * $b);
  70. if ($v > $maxv) $maxv = $v;
  71. if ($v < $minv) $minv = $v;
  72. }
  73. }
  74.  
  75. return round(($maximum / (15 + $maxv - $minv)) * 27000 / 255, 2);
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement