颜色提取脚本 - ForEach错误

时间:2012-08-19 15:11:21

标签: php foreach

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

脚本在这里:

<?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()提供的参数无效

是否有人能够看到我能够热链接到图像的方式,因为这是使用脚本的重点!

2 个答案:

答案 0 :(得分:1)

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

因此,您需要调查另一个SO问题:Download File to server from URL

答案 1 :(得分:0)

该错误表示Get_Color返回的值不是可以迭代的有效对象,可能不是集合。您需要知道Get_Color内部如何工作以及当它无法获得所需内容时返回的内容。

在平均时间内,您可以[使用PHP]将外部网址中的图像下载到您的网站,然后下载到所需的文件夹中,然后从那里读取图像。

$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");

顺便问一下,你确认图片网址是否正确?