PHP / GD Gaussian Blur Etkisi

2 Cevap php

Ben şu anda aşağıdaki kodu kullanarak ediyorum PHP ve GD kullanarak bir görüntünün belirli bir alanı karartmak gerekir:

for ($x = $_GET['x1']; $x < $_GET['x2']; $x += $pixel)
{
    for ($y = $_GET['y1']; $y < $_GET['y2']; $y += $pixel)
    {
    	ImageFilledRectangle($image, $x, $y, $x + $pixel - 1, $y + $pixel - 1, ImageColorAt($image, $x, $y));
    }
}

Bu temelde $ piksel piksel kareler ile seçilen alanı değiştirir. Ben imagefilter () işlevini kullanabilirsiniz biliyorum, bulanıklık çeşit (Gauss tercihen) etki başarmak istiyorum:

ImageFilter($image, IMG_FILTER_GAUSSIAN_BLUR);

Ama benim sorunum ben sadece belirli bir alan bulanıklık istiyorum ki, tüm tuval bulanıklaştırır.

2 Cevap

Sen, yeni bir görüntü içine resmin belirli bir kısmını kopyalayıp yeni görüntü üzerinde bulanıklık uygulamak ve sonucu geri kopyalayabilirsiniz.

Sıralama şöyle:

$image2 = imagecreate($width, $height);
imagecopy  ( $image2  , $image  , 0  , 0  , $x  , $y  , $width  , $height);
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
imagecopy ($image, $image2, $x, $y, 0, 0, $width, $height);

Ben imagefilter için belgelerine kontrol etmedi ve bir görüntüden (bir parçası), bu uygulamadan bir eşdeğer olup olmadığını, bu imkansız ya da ben bilmiyorum. Ama yok varsayarak, neden olmasın:

  1. Yeni bir (geçici) GD görüntü (sadece yeni bir geçici değişkene atamak, diske yazmak için gerek) bulanıklık istediğiniz kısmını kopyalayın.
  2. Bu geçici görüntüye gaussian blur filtresi uygulayın.
  3. (Bu GD kütüphanesi kesinlikle yapmak için işlevsellik) hemen geri nereden geldi edilen (filtre) görüntüsü kopyalama