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 线稿比较的主要内容,如果未能解决你的问题,请参考以下文章

用 PHP 比较图像中的形状

是否有使用 C# 比较两个 PNG 图像的一部分而不是完整图像的功能?

Sketch | 线稿!纯纯的线稿,汽车手绘必备素材70张

如何使用颜色比较 Gif 和 PNG 的质量。计算每像素位数是不是有效

MAYA如何渲染线稿效果

PHP 绘图技术