Cập nhật trả lời
Trên thực tế, bây giờ mà bạn trỏ nó ra một cách rõ ràng, số liệu ABSOLUTE_ERROR sẽ không hoạt động khi sự khác biệt duy nhất là sự minh bạch.
Để giải đáp câu hỏi của bạn, có lẽ bạn chỉ muốn tách ra kênh alpha sử dụng:
separateImageChannel(Imagick::CHANNEL_ALPHA);
và rồi lấy trung bình thống kê của nó mà sẽ cho bạn biết bao nhiêu phần trăm của các điểm ảnh màu trắng - nghĩa minh bạch.
Tôi sẽ để lại câu trả lời ban đầu dưới đây, bởi vì nó là một kỹ thuật hữu ích sẽ làm việc cho bất kỳ sự khác biệt hình ảnh nào khác không hoàn toàn về tính minh bạch.
gốc trả lời
Bạn có thể nhận được các thuộc tính hình ảnh sau khi so sánh và tìm ra nguyên tố gọi là "bóp méo" trong đó. Vì vậy, nếu tôi bắt đầu với hình ảnh này:
và sau đó cuộn nó đúng 10 pixels:
<?php
$image1 = new Imagick("image.png");
$image2 = new Imagick("image.png");
$result = $image1->compareImages($image2,Imagick::METRIC_MEANABSOLUTEERROR);
$p1=$image1->getImageProperties();
print_r($p1);
$image1->rollImage(10,0);
$result = $image1->compareImages($image2,Imagick::METRIC_MEANABSOLUTEERROR);
$p1=$image1->getImageProperties();
print_r($p1);
?>
Output
Array
(
[date:create] => 2016-06-02T14:15:01+01:00
[date:modify] => 2016-06-02T14:15:01+01:00
[distortion] => 0 <--- Here's the little devil
[png:bKGD] => chunk was found (see Background color, above)
[png:cHRM] => chunk was found (see Chromaticity, above)
[png:gAMA] => gamma=0.45454544 (See Gamma, above)
[png:IHDR.bit-depth-orig] => 4
[png:IHDR.bit_depth] => 4
[png:IHDR.color-type-orig] => 3
[png:IHDR.color_type] => 3 (Indexed)
[png:IHDR.interlace_method] => 0 (Not interlaced)
[png:IHDR.width,height] => 200, 200
[png:PLTE.number_colors] => 5
[png:sRGB] => intent=0 (Perceptual Intent)
[png:text] => 2 tEXt/zTXt/iTXt chunks were found
[png:tIME] => 2016-06-02T14:15:01Z
)
Array
(
[date:create] => 2016-06-02T14:15:01+01:00
[date:modify] => 2016-06-02T14:15:01+01:00
[distortion] => 0.0833333 <--- Here's the little devil
[png:bKGD] => chunk was found (see Background color, above)
[png:cHRM] => chunk was found (see Chromaticity, above)
[png:gAMA] => gamma=0.45454544 (See Gamma, above)
[png:IHDR.bit-depth-orig] => 4
[png:IHDR.bit_depth] => 4
[png:IHDR.color-type-orig] => 3
[png:IHDR.color_type] => 3 (Indexed)
[png:IHDR.interlace_method] => 0 (Not interlaced)
[png:IHDR.width,height] => 200, 200
[png:PLTE.number_colors] => 5
[png:sRGB] => intent=0 (Perceptual Intent)
[png:text] => 2 tEXt/zTXt/iTXt chunks were found
[png:tIME] => 2016-06-02T14:15:01Z
)
Nguồn
2016-06-02 14:03:10
Hãy thử sử dụng '$ image-> identFor mat ("% [biến dạng]") 'để chọn chỉ số sau khi chạy' $ image-> compareImages() ' –
Câu trả lời của tôi dưới đây có phân loại vấn đề của bạn không? Nếu vậy, xin vui lòng xem xét chấp nhận nó như là câu trả lời của bạn - bằng cách nhấp vào dấu tick/dấu kiểm màu xanh lá cây bên cạnh số phiếu bầu. Nếu không, vui lòng nói những gì không hiệu quả để tôi hoặc người khác có thể hỗ trợ thêm cho bạn. Cảm ơn. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –