2009-08-08 11 views
10

tôi cần phải xáo trộn một khu vực nhất định của hình ảnh bằng PHP và GD, hiện nay tôi đang sử dụng đoạn mã sau:PHP/GD Gaussian Blur Effect

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)); 
    } 
} 

này về cơ bản thay thế vùng chọn với hình vuông $ pixel pixel. Tôi muốn thực hiện một số loại mờ (gaussian tốt) có hiệu lực, tôi biết tôi có thể sử dụng imagefilter() chức năng:

ImageFilter($image, IMG_FILTER_GAUSSIAN_BLUR); 

Nhưng nó làm mờ toàn bộ vải, vấn đề của tôi là tôi chỉ muốn làm mờ một cụ thể khu vực.

Trả lời

12

Bạn có thể sao chép một phần cụ thể của hình ảnh vào một hình ảnh mới, áp dụng hiệu ứng làm mờ trên hình ảnh mới và sao chép kết quả trở lại.

Sắp xếp như thế này:

$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); 
+0

Trên thực tế, đây là một cách giải quyết đẹp tuy nhiên tôi vẫn muốn biết làm thế nào để tay tạo hiệu ứng mờ như hiệu ứng. –

+0

Bạn có thể tìm kiếm trên wikipedia: http://en.wikipedia.org/wiki/Gaussian_blur#Thực hiện hoặc xem các bài đăng tương tự trên StackOverflow: http://stackoverflow.com/questions/98359/fastest-gaussian-blur- thực hiện nhưng tôi khuyên bạn nên sử dụng thư viện tích hợp sẵn. Các thư viện này sử dụng các thuật toán được biên dịch để tăng tốc quá trình. – Scharrels

+0

Tôi lấy gợi ý bạn đưa cho tôi và tôi đã lặp lại ImageFilter 128 trên khu vực được chọn để làm xáo trộn nó, có thể bằng cách thực hiện tùy chỉnh tôi có thể nhận được kết quả nhanh hơn. –

2

tôi không kiểm tra tài liệu cho imagefilter và tôi không biết nếu điều này là không thể hoặc nếu có một tương đương với việc áp dụng này để (một phần) của một hình ảnh. Nhưng giả sử không có, tại sao không:

  1. Sao chép phần bạn muốn làm mờ sang hình ảnh GD tạm thời (không cần phải ghi vào đĩa, chỉ gán cho biến tạm thời mới).
  2. Áp dụng bộ lọc gaussian blur cho hình ảnh tạm thời này.
  3. Sao chép kết quả (đã lọc) hình ảnh quay lại ngay nó đến từ đâu (chức năng để làm điều này chắc chắn là trong thư viện GD)