2011-07-19 37 views
9

Tôi muốn có thể phát hiện xem hình ảnh có trong suốt hay không bằng cách sử dụng tiện ích mở rộng Imagick PHP.PHP imagick phát hiện độ trong suốt

Cho đến giờ, may mắn duy nhất tôi có là chạy lệnh exec()/một số lệnh khác và sử dụng công cụ dòng lệnh ImageMagick để đạt được điều này. Dưới đây là ý tôi:

exec("identify -verbose example_transparent_image.png | grep \"Alpha\"", $output); 
$is_transparent = !empty($output) ? true : false; 

Logic đơn giản. Thực hiện kiểm tra chi tiết trên hình ảnh được đề cập: nếu đầu ra chứa bất kỳ thông tin alpha nào, điều đó có nghĩa là nó sử dụng tính minh bạch.

Dường như phần mở rộng hình ảnh PHP nên có điều này như một trong các lệnh của nó, nhưng thiếu tài liệu đang giết tôi. Có vẻ ngớ ngẩn khi phải chạy loại kiểm tra này mỗi lần.

Trả lời

9

Ahhh, giải quyết (tôi nghĩ). Imagick có hàm getImageAlphaChannel() trả về true nếu nó chứa bất kỳ thông tin alpha nào và false nếu nó không có.

Đảm bảo bạn có ImageMagick 6.4.0 hoặc mới hơn.

http://www.php.net/manual/en/function.imagick-getimagealphachannel.php

+1

Tự mình chạy vào vấn đề chính xác này, tôi đã chạy qua cả hai định dạng và getimagealphachannel. Identifyimage chỉ đơn giản là không cung cấp đủ thông tin, trong khi getimagealphachannel hoạt động tốt. Về mặt lý thuyết, getImageAlphaChannel() cung cấp một hằng số ALPHACHANNEL, nhưng tài liệu là, thẳng thắn, rác trong khía cạnh này. Tôi nhận được '0' cho JPG, '1' cho PNG có alpha và '0' cho 32 bit không có alpha. Về cơ bản, kết quả mong đợi hoàn hảo. Vì vậy, mặc dù đây là câu hỏi trả lời 10 tháng hiện tại, tôi nghĩ rằng nó đáng giá thêm 2 xu của tôi. –

0

Điều này có nghĩa là gì?

substr((new Imagick($FILE))->identifyImage()['type'], 0, -5) == 'Alpha' 

xem documentation of identifyImage. Bạn sẽ thấy tài liệu bị thiếu của đầu ra chức năng. Nó chỉ là một phiên bản phân tích của

identify -verbose $FILE (from the imagick package) 

nơi type xác định loại của hình ảnh (so sánh source). Bạn có thể thấy rằng imagick trả về giá trị từ một số mảng MagickTypeOptions được xác định here. Mảng này chứa phiên bản -Alpha-Matte cho mọi loại hình ảnh nếu bảng màu của nó chứa alpha.

Về mặt lý thuyết, bạn có thể lưu hình ảnh bằng bảng màu đó mà không cần sử dụng nó, nhưng mọi lập trình phù hợp đều phải chuyển sang phiên bản không phải alpha trong trường hợp này. Nhưng sai tích cực là có thể nhưng nên được hiếm.

Ngoài ra tôi không kiểm tra sự loại hình ảnh -Matte vì trong mảng được định nghĩa trong một cách mà cho tất cả các loại hình ảnh liên tục có hai mục với tên gọi khác nhau (-Alpha-Matte), nhưng như -Alpha xuất hiện trước tên này sẽ được trả lại cho loại hình ảnh đó.

+0

Bạn có thể thêm một số giải thích và ví dụ liên kết đến tài liệu không? –

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