【问题标题】:Set php $value inside function foreach在函数 foreach 中设置 php $value
【发布时间】:2018-08-09 14:10:57
【问题描述】:

我有这个代码:

<?php
// EXAMPLE PICTURE
$url='https://admin2.e-hjemmeside.dk/upload/images/89.jpg';

//var_dump(getColorPallet($url));

echoColors(getColorPallet($url));


function echoColors($pallet){ // OUTPUT COLORSBAR
    foreach ($pallet as $key=>$val)
        echo '<div style="display:inline-block;width:50px;height:20px;background:#'.$val.'"> </div>';
}

function getColorPallet($imageURL, $palletSize=[3,3]){ // GET PALLET FROM IMAGE PLAY WITH INPUT PALLET SIZE
    // SIMPLE CHECK INPUT VALUES
    if(!$imageURL) return false;

    // IN THIS EXEMPLE WE CREATE PALLET FROM JPG IMAGE
    $img = imagecreatefromjpeg($imageURL);

    // SCALE DOWN IMAGE
    $imgSizes=getimagesize($imageURL);

    $resizedImg=imagecreatetruecolor($palletSize[0],$palletSize[1]);

    imagecopyresized($resizedImg, $img , 0, 0 , 0, 0, $palletSize[0], $palletSize[1], $imgSizes[0], $imgSizes[1]);

    imagedestroy($img);

    //CHECK IMAGE
    /*header("Content-type: image/png");
    imagepng($resizedImg);
    die();*/

    //GET COLORS IN ARRAY
    $colors=[];

    for($i=0;$i<$palletSize[1];$i++)
        for($j=0;$j<$palletSize[0];$j++)
            $colors[]=dechex(imagecolorat($resizedImg,$j,$i));

    imagedestroy($resizedImg);

    //REMOVE DUPLICATES
    $colors= array_unique($colors);

    return $colors;

}
?>

来自这个问题Detect main colors in an image with PHP

我想在函数内部设置一个值,比如

$colorsinimage = "".$colorsinimage."#".$val."";

将图像中的所有颜色存储为字符串。该字符串可以在函数外用于存储到数据库中,回显字符串,对颜色进行排序...

我该怎么做?

提前致谢:-)

编辑

感谢您的 cmets :-) 问题 .../16959576/.. 的链接对理解这一切非常有帮助。之后我发现 $GLOBALS og 它似乎以某种方式工作。如果我添加 $GLOBALS['imagecolors'] = "";首先在代码中,然后 $GLOBALS['imagecolors'] = "".$GLOBALS['imagecolors']."#".$val."";在第一个函数中,我最终 echo $imagecolors;最后,结果是最新的颜色#291a17。而不是最新的颜色,我想将 $GLOBALS['imagecolors'] 设置为一个包含所有颜色的字符串,一个包含 $val 的所有不同值的数组。

带有 $GLOBALS 的新代码:

<?php
$GLOBALS['imagecolors'] = "";
// EXAMPLE PICTURE
$url='https://admin2.e-hjemmeside.dk/upload/images/89.jpg';

//var_dump(getColorPallet($url));

echoColors(getColorPallet($url));


function echoColors($pallet){ // OUTPUT COLORSBAR
    foreach ($pallet as $key=>$val)
        echo '<div style="display:inline-block;width:50px;height:20px;background:#'.$val.'"> </div>';
        $GLOBALS['imagecolors'] = "".$GLOBALS['imagecolors']."#".$val."";
}

function getColorPallet($imageURL, $palletSize=[3,3]){ // GET PALLET FROM IMAGE PLAY WITH INPUT PALLET SIZE

    // SIMPLE CHECK INPUT VALUES
    if(!$imageURL) return false;

    // IN THIS EXEMPLE WE CREATE PALLET FROM JPG IMAGE
    $img = imagecreatefromjpeg($imageURL);

    // SCALE DOWN IMAGE
    $imgSizes=getimagesize($imageURL);

    $resizedImg=imagecreatetruecolor($palletSize[0],$palletSize[1]);

    imagecopyresized($resizedImg, $img , 0, 0 , 0, 0, $palletSize[0], $palletSize[1], $imgSizes[0], $imgSizes[1]);

    imagedestroy($img);

    //CHECK IMAGE
    /*header("Content-type: image/png");
    imagepng($resizedImg);
    die();*/

    //GET COLORS IN ARRAY
    $colors=[];

    for($i=0;$i<$palletSize[1];$i++)
        for($j=0;$j<$palletSize[0];$j++)
            $colors[]=dechex(imagecolorat($resizedImg,$j,$i));

    imagedestroy($resizedImg);

    //REMOVE DUPLICATES
    $colors= array_unique($colors);

    return $colors;
}

echo $imagecolors;
?>

谢谢亚历克斯 - 它工作得很好:-)

正确的代码

<?php
// EXAMPLE PICTURE
$url='https://admin2.e-hjemmeside.dk/upload/images/89.jpg';

//var_dump(getColorPallet($url));

echoColors(getColorPallet($url));


function echoColors($pallet){
    global $imagecolors;
    $imagecolors = '';
    foreach ($pallet as $key=>$val) {
        echo '<div style="display:inline-block;width:50px;height:20px;background:#'.$val.'"> </div>';
        $imagecolors .= "#".$val;
    }
}

function getColorPallet($imageURL, $palletSize=[3,3]){ // GET PALLET FROM IMAGE PLAY WITH INPUT PALLET SIZE

    // SIMPLE CHECK INPUT VALUES
    if(!$imageURL) return false;

    // IN THIS EXEMPLE WE CREATE PALLET FROM JPG IMAGE
    $img = imagecreatefromjpeg($imageURL);

    // SCALE DOWN IMAGE
    $imgSizes=getimagesize($imageURL);

    $resizedImg=imagecreatetruecolor($palletSize[0],$palletSize[1]);

    imagecopyresized($resizedImg, $img , 0, 0 , 0, 0, $palletSize[0], $palletSize[1], $imgSizes[0], $imgSizes[1]);

    imagedestroy($img);

    //CHECK IMAGE
    /*header("Content-type: image/png");
    imagepng($resizedImg);
    die();*/

    //GET COLORS IN ARRAY
    $colors=[];

    for($i=0;$i<$palletSize[1];$i++)
        for($j=0;$j<$palletSize[0];$j++)
            $colors[]=dechex(imagecolorat($resizedImg,$j,$i));

    imagedestroy($resizedImg);

    //REMOVE DUPLICATES
    $colors= array_unique($colors);

    return $colors;
}

echo $imagecolors;
?>

【问题讨论】:

  • 哪个函数?您发布了 2
  • 阅读这个帖子我想这就是你要找的东西:stackoverflow.com/questions/16959576/…
  • $colorsinimage .= "#".$val; 是您建议要做的事情的较短版本。但是没有任何关于这个字符串最终应该如何实际外观的真实上下文(提供一个确切期望结果的示例)......在这里很难猜到。您最好不要将它们放入一个数组中,例如:$colorsinimage[] = "#".$val; .. 然后在您的函数上使用 return array($colors,$colorsinimage);,这样您就可以根据需要使用这些颜色,进行排序、存储、切碎等。
  • 你当前的输出是什么,你想要的输出是什么?

标签: php function


【解决方案1】:

您的代码中的主要问题是打字错误。

你在 foreach 之后没有大括号,所以我猜你只能从数组中获得最后一个值到你的 var。

只要解决这个问题,你应该会得到更好的结果:

function echoColors($pallet){ // OUTPUT COLORSBAR
    foreach ($pallet as $key=>$val) {
        echo '<div style="display:inline-block;width:50px;height:20px;background:#'.$val.'"> </div>';
        $GLOBALS['imagecolors'] = "".$GLOBALS['imagecolors']."#".$val."";
    }
}

但是这里如何更好地处理全局变量和其他一些代码优化:

function echoColors($pallet){
    global $imagecolors;
    $imagecolors = '';
    foreach ($pallet as $key=>$val) {
        echo '<div style="display:inline-block;width:50px;height:20px;background:#'.$val.'"> </div>';
        $imagecolors .= "#".$val;
    }
}

【讨论】:

    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2013-06-26
    • 1970-01-01
    • 2017-05-30
    • 2014-10-18
    相关资源
    最近更新 更多