1

所以我从互联网上下载并编辑了一个脚本来提取图像并找出它包含的十六进制值及其百分比:

脚本在这里:

<?php
$delta = 5;
$reduce_brightness = true;
$reduce_gradients = true;
$num_results = 5;

include_once("colors.inc.php");
$ex=new GetMostCommonColors();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Colour Verification</title>

</head>
<body>
    <div id="wrap">
    <img src="http://www.image.come/image.png" alt="test image" />
    <?php
        $colors=$ex->Get_Color("http://www.image.come/image.png", $num_results, $reduce_brightness, $reduce_gradients, $delta);
        $success = true;
        foreach ( $colors as $hex => $count ) {
            if ($hex !== 'e6af23') {$success = false; }
        if ($hex == 'e6af23' && $count > 0.05) {$success = true; break;}
        }

        if ($success == true) { echo "This is the correct colour. Success!"; } else { echo "This is NOT the correct colour. Failure!"; }


?>
    </div>

</body>
</html>

这是文件 colors.inc.php 的 pastebin 链接

http://pastebin.com/phUe5Pad

现在,如果我使用服务器上的图像,脚本可以正常工作,例如在 Get_Color 函数中使用 /image.png。但是,如果我尝试使用来自另一个网站的图像,包括http://www.site.com/image.png,那么脚本将不再有效,并且会出现以下错误:

警告:在第 22 行的 ... 中为 foreach() 提供了无效参数

有没有人能够看到我可以热链接到图像的方式,因为这是使用脚本的全部意义!

4

2 回答 2

1

您必须将文件下载到服务器并将其完整文件名Get_Color($img)作为$img参数传递给方法。

因此,您需要调查另一个 SO 问题:从 URL 下载文件到服务器

于 2012-08-19T15:39:15.533 回答
0

该错误表明返回的值Get_Color不是可以迭代的有效对象,可能不是集合。你需要知道Get_Color内部是如何工作的,以及当它没有得到它想要的东西时会返回什么。

同时,您可以 [使用 PHP] 将外部 url 中的图像下载到您的站点,然后进入所需的文件夹并从那里读取图像。

$image = "http://www.image.come/image.png";
download($image, 'folderName'); //your custom function
dnld_image_name = getNameOfImage();

$colors=$ex->Get_Color("/foldername/dnld_image_name.png");

顺便问一下,您确认图片网址正确吗?

于 2012-08-19T15:39:03.950 回答