Введение
Я думаю, вы должны получить Imagemagick установлен, потому что вы хотите, это просто vignette
эффект, вы можете легко, так что с ImageMagic (convert input.jpg -background black -vignette 70x80 output.png
) без необходимости зацикливать каждый пиксель, который может быть очень медленным при работе с большими изображениями
Исходное изображение
$file = __DIR__ . "/golf.jpg";
Эффект 1
$image = new imagick($file);
$image->vignetteImage(20, 20, 40, - 20);
header("Content-Type: image/png");
echo $image;
Эффект 2
$image = new imagick($file);
$image->vignetteImage(100, 100, 200, 200);
header("Content-Type: image/png");
echo $image;
виньетка с Г. Д.
Ну, если вы вынуждены использовать ГБ ... Использование может использовать этот cool vignette script
function vignette($im) {
$width = imagesx($im);
$height = imagesy($im);
$effect = function ($x, $y, &$rgb) use($width, $height) {
$sharp = 0.4; // 0 - 10 small is sharpnes,
$level = 0.7; // 0 - 1 small is brighter
$l = sin(M_PI/$width * $x) * sin(M_PI/$height * $y);
$l = pow($l, $sharp);
$l = 1 - $level * (1 - $l);
$rgb['red'] *= $l;
$rgb['green'] *= $l;
$rgb['blue'] *= $l;
};
for($x = 0; $x < imagesx($im); ++ $x) {
for($y = 0; $y < imagesy($im); ++ $y) {
$index = imagecolorat($im, $x, $y);
$rgb = imagecolorsforindex($im, $index);
$effect($x, $y, $rgb);
$color = imagecolorallocate($im, $rgb['red'], $rgb['green'], $rgb['blue']);
imagesetpixel($im, $x, $y, $color);
}
}
return (true);
}
Faster GD виньетка подход
Лучше подошел используемый в GD Filter testing бы ... чтобы создать маску и снова уложить
$overlay = 'vignette_white.png';
$png = imagecreatefrompng($overlay);
imagecopyresampled($filter, $png, 0, 0, 0, 0, $width, $height, $width, $height);
Единственным недостатком является то, что изображение должно быть того же размера с маской, чтобы эффект выглядел круто
Заключение
Если это то, что вы имеете в виду radial transparent gradient
то я советую вам получить ImageMagic
, если не по крайней мере, леди картина мило.
http://stackoverflow.com/questions/6615602/radial-gradients-with-opacity-in-php?rq=1 # answer-6615727 –
Использование CSS: http://stackoverflow.com/a/4527735/738201 – Chad
В худшем случае вы можете построить градиент окружности PNG с использованием примитивов GD, но вместо применения сдвига цвета примените сдвиг непрозрачности. Затем наложите PNG поверх текущего изображения. У меня нет кода для этого, но он может дать вам несколько новых идей по поисковым фразам. – halfer