PHP .png 线稿比较
Posted
技术标签:
【中文标题】PHP .png 线稿比较【英文标题】:PHP .png Lineart Comparison 【发布时间】:2011-07-14 22:09:36 【问题描述】:几天来,我一直被困在一项涉及使用 php 进行图像比较的任务上。我开始认为 PHP 不是执行此类任务的语言。
目标:
使用一个基数,比较一个新的艺术线条,并返回它们之间的百分比差异。 我尝试了几种解决方法:比较像素数的差异(这并不能真正解决线条艺术差异的目标),使所有重叠的像素变为白色,并找到没有透明度/颜色的像素白色并除以底部的不透明像素(似乎没有得到正确的数字)
这是一个例子:
-- -- -- -- -- -- -- -- 基础 -- -- -- -- -- -- -- -- -- -- -- 艺术线条 -- -- - - -- -- -- --
百分比差异应该在 54% 左右。但是,我尝试过的所有方法都无法接近(~5%)
。
我的问题是:这可以/如何在 PHP 中完成? 谢谢!
图片 © Aywas.com
【问题讨论】:
开箱即用的 PHP 不可能做到这一点。 @brady:PHP 支持 gd 和 ImageMagick... 所以这是可能的。 @Justin,我不认为他试图达到的误差范围。我在许多项目中都使用过 GD,但我无法理解它的准确度。我希望看到有人对我的做法感到惊讶。 不得不说,我对 PHP + 图形设计相当悲观 【参考方案1】:您可以尝试使用 ImageMagick 函数compareimagechannels(),只使用黑色通道?
编辑:这是一个基本的尝试及其输出。您也许可以操纵输出数字来计算您的阈值。图片 1 和 2 是艺术线条,图片 3 是调整为 200x200 的 Google 标题徽标。
$img1 = new Imagick('image1.png');
$img2 = new Imagick('image2.png');
$img3 = new Imagick('image3.png');
$diff12 = $img1->compareImageChannels($img2,
Imagick::CHANNEL_ALL, Imagick::METRIC_MEANABSOLUTEERROR);
$diff13 = $img1->compareImageChannels($img3,
Imagick::CHANNEL_ALL, Imagick::METRIC_MEANABSOLUTEERROR);
print_r($diff12);
print_r($diff13);
输出:
Array
(
[0] => Imagick Object
(
)
[1] => 1512.25385625
)
Array
(
[0] => Imagick Object
(
)
[1] => 24353.6380375
)
【讨论】:
以上是关于PHP .png 线稿比较的主要内容,如果未能解决你的问题,请参考以下文章
是否有使用 C# 比较两个 PNG 图像的一部分而不是完整图像的功能?