2012-05-25 34 views
5

Tôi muốn xóa nền trắng của bất kỳ hình ảnh nào được tải lên trên trang web hoạt động trên nền tảng PHP. Chức năng tải lên được thực hiện nhưng bị rối tung với chức năng này.Xóa hình nền bằng php và lưu trong suốt png

Dưới đây là liên kết Tôi tìm thấy ở đây: Remove white background from an image and make it transparent

Nhưng điều này đang làm ngược lại. Tôi muốn loại bỏ các nền màu và làm cho nó hình ảnh với nền trong suốt.

+3

Hãy đề cập đến lý do trừ đi bỏ phiếu –

+0

giải thích thêm và cho chúng ta thấy những gì bạn đã làm, và tôi không phải người đã xuống hạng. –

+0

Tôi vừa chỉnh sửa câu hỏi của mình. –

Trả lời

0

Sử dụng xử lý hình ảnh php và GD, đọc pixel hình ảnh theo pixel nếu các thành phần RGB là 255 (pixel trắng), đặt kênh alpha thành 255 (trong suốt). Bạn có thể phải thay đổi loại tệp của hình ảnh tùy thuộc vào loại tệp được tải lên có hỗ trợ kênh alpha hay không.

4

Vì bạn chỉ cần một màu trong suốt, cách dễ nhất là xác định màu trắng với imagecolortransparent(). Nội dung như thế này (mã chưa được kiểm tra):

$img = imagecreatefromstring($your_image); //or whatever loading function you need 
$white = imagecolorallocate($img, 255, 255, 255); 
imagecolortransparent($img, $white); 
imagepng($img, $output_file_name); 
+0

Tôi đã cố gắng loại bỏ các ký tự không mong muốn trên màn hình: $ file = 'itsmehere.png'; // path to png image $ img = imagecreatefrompng ($ file); // mở hình ảnh $ white = imagecolorallocate ($ img, 255, 255, 255); imagecolortransparent ($ img, $ color); imagepng ($ img, $ output_file_name); –

+0

Vui lòng giải thích về 'các ký tự không mong muốn'. – Maerlyn

+0

Đó là cảnh báo (hình ảnh đó() nhận được tài nguyên không hợp lệ), sau đó là hình ảnh PNG. – Maerlyn

1

lấy chỉ mục màu trắng trong hình ảnh và đặt màu trong suốt.

$whiteColorIndex = imagecolorexact($img,255,255,255); 
$whiteColor = imagecolorsforindex($img,$whiteColorIndex); 
imagecolortransparent($img,$whiteColor); 

bạn có thể sử dụng phương pháp imagecolorclosest() nếu bạn không biết chính xác màu.

4
function transparent_background($filename, $color) 
{ 
    $img = imagecreatefrompng('image.png'); //or whatever loading function you need 
    $colors = explode(',', $color); 
    $remove = imagecolorallocate($img, $colors[0], $colors[1], $colors[2]); 
    imagecolortransparent($img, $remove); 
    imagepng($img, $_SERVER['DOCUMENT_ROOT'].'/'.$filename); 
} 

transparent_background('logo_100x100.png', '255,255,255'); 
2

Thử ImageMagick nó đã làm điều đó cho tôi. Bạn cũng có thể kiểm soát lượng màu cần xóa. Chỉ cần vượt qua đường dẫn hình ảnh, bgcolor như một mảng RGB, và mờ theo phần trăm. Miễn là bạn đã cài đặt ImageMagick trên hệ thống/lưu trữ của mình. Tôi đã có nhà cung cấp hosting của tôi cài đặt nó cho tôi như một mô-đun.

Tôi đang sử dụng phiên bản ImageMagick 6.2.8

Ví dụ:

$image = "/path/to/your/image.jpg"; 
    $bgcolor = array("red" => "255", "green" => "255", "blue" => "255"); 
    $fuzz = 9; 
    remove_image_background($image, $bgcolor, $fuzz); 

     protected function remove_image_background($image, $bgcolor, $fuzz) 
     { 
      $image = shell_exec('convert '.$image.' -fuzz '.$fuzz.'% -transparent "rgb('.$bgcolor['red'].','.$bgcolor['green'].','.$bgcolor['blue'].')" '.$image.''); 
      return $image; 
     } 
0

Chức năng từ @ geoffs3310 phải là câu trả lời được chấp nhận ở đây, nhưng lưu ý, rằng png lưu không chứa alpha kênh.

Để loại bỏ nền và lưu png mới như một png trong suốt với alpha đoạn mã sau làm việc

$_filename='/home/files/IMAGE.png'; 
$_backgroundColour='0,0,0'; 
$_img = imagecreatefrompng($_filename); 
$_backgroundColours = explode(',', $_backgroundColour); 
$_removeColour = imagecolorallocate($_img, (int)$_backgroundColours[0], (int)$_backgroundColours[1], (int)$_backgroundColours[2]); 
imagecolortransparent($_img, $_removeColour); 
imagesavealpha($_img, true); 
$_transColor = imagecolorallocatealpha($_img, 0, 0, 0, 127); 
imagefill($_img, 0, 0, $_transColor); 
imagepng($_img, $_filename); 
Các vấn đề liên quan