2012-03-05 35 views
5

Tôi đang cố gắng xóa các vùng trong suốt của hình ảnh bằng php bằng cách sử dụng imagick.Làm thế nào để thiết lập màu cắt tỉa trong Imagick?

ảnh Magick cung cấp trim phương pháp: Imagick::trimImage

Di cạnh đó là màu nền từ hình ảnh. Phương pháp này khả dụng nếu Imagick được biên dịch dựa trên ImageMagick phiên bản 6.2.9 hoặc mới hơn.

Làm cách nào để đặt màu mà Imagick có thể cắt?

Tập lệnh sau đặt màu nền thành xám. Tuy nhiên, trim sẽ xóa màu nền màu xanh như bạn có thể thấy bên dưới.

$im = new Imagick("1.png"); 
// Set background color to grey 
$im->setImageBackgroundColor(new ImagickPixel("rgb(213,213,213)")); 
$im->trimImage(0); 
$im->writeImage('2.png'); 

enter image description here

Có cách nào để hạn chế những màu sắc trang trí?

imagick mô-đun version => 2.1.1-rc1

+0

tôi nghi ngờ rằng các tài liệu có thể được sử dụng một định nghĩa khá lỏng hơn của "màu nền" hơn bạn đang mong đợi. Cắt trong ImageMagick tự loại bỏ nền bằng cách lấy màu sắc của * điểm ảnh * của hình ảnh và làm việc từ đó, tôi tin. Điều đó chắc chắn có vẻ là những gì đang xảy ra trong trường hợp của bạn. Để xác nhận điều đó, hãy thử sử dụng ví dụ ba màu từ [thủ công] (http://www.imagemagick.org/Usage/crop/#trim) - tạo một hình ảnh với ba hình vuông màu liên tục, chạy trang trí của bạn và xem liệu bạn có còn lại chỉ với hình vuông ở giữa không. –

+0

trong ví dụ này, hình ảnh kết quả là hình vuông, NICE ... i những gì để đảm bảo nó là hình vuông. là có một chức năng có thể làm điều đó .... nếu hình ảnh là hình chữ nhật và "loại bỏ" hoặc nền xung quanh tạo ra một hình ảnh hình chữ nhật, tôi những gì để FORCE nó được hình vuông .... – menardmam

Trả lời

7

Matt Gibsons Gợi ý dẫn tôi đến giải pháp đúng: http://www.imagemagick.org/Usage/crop/#trim_color

Như Matt đã giải thích phương pháp cắt mất màu sắc góc để cắt hình ảnh. Giải pháp đã cho từ tài liệu là giải pháp thay thế: Chúng vẽ đường viền xung quanh hình ảnh trước khi chúng gọi phương thức cắt.

$img = new Imagick("stripes.gif"); 
// Set the color to trim: 
$img->borderImage("#FF0000", 1, 1); 
$img->trimImage(0); 
$img->setImagePage(0, 0, 0, 0); 
$img->writeImage("test.jpg");' 

Demo

+0

Tuyệt vời, vui vì dự đoán của tôi là đúng. –

-1

Bạn đã cố gắng xác định màu nền của bạn như là một mã hex, chứ không phải là instantiating một ImagickPixel cho nó?

$im->setImageBackgroundColor(#D5D5D5); 
+0

Cảm ơn Karl nhưng kết quả vẫn giống nhau. – jantimon

+0

setImageBackgroundColor: "Bây giờ cho phép một chuỗi đại diện cho màu sắc như tham số. Các phiên bản trước chỉ cho phép một đối tượng ImagickPixel." – jantimon

Các vấn đề liên quan