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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79:
<?php
namespace MvcCore\Ext\Tools\Images\Gds;
class ApplyMask {
public static function Process ($image, $mask) {
$xSize = imagesx($image);
$ySize = imagesy($image);
$newPicture = imagecreatetruecolor($xSize, $ySize);
imagesavealpha($newPicture, TRUE);
imagefill(
$newPicture, 0, 0,
imagecolorallocatealpha($newPicture, 0, 0, 0, 127)
);
if ($xSize != imagesx($mask) || $ySize != imagesy($mask)) {
$tempPic = imagecreatetruecolor($xSize, $ySize);
imagecopyresampled(
$tempPic, $mask, 0, 0, 0, 0,
$xSize, $ySize, imagesx($mask), imagesy($mask)
);
imagedestroy($mask);
$mask = $tempPic;
}
for ($x = 0; $x < $xSize; $x++) {
for($y = 0; $y < $ySize; $y++) {
$rgba = imagecolorsforindex(
$mask, imagecolorat($mask, $x, $y)
);
$whiteRatio = (
$rgba['red'] + $rgba['green'] + $rgba['blue']
) / 765;
$alpha = 127 - round(127 * $whiteRatio);
$color = imagecolorsforindex(
$image, imagecolorat($image, $x, $y)
);
imagesetpixel(
$newPicture,
$x, $y,
imagecolorallocatealpha(
$newPicture,
$color['red'],
$color['green'],
$color['blue'],
$alpha
)
);
}
}
imagedestroy($image);
$image = $newPicture;
}
}