php - 在函数 foreach 中设置 php $value
问题描述
我有这个代码:
<?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 colours in an image with PHP
我想在函数内部设置一个值,比如
$colorsinimage = "".$colorsinimage."#".$val."";
将图像中的所有颜色存储为字符串。该字符串可以在函数外部用于存储到数据库中,回显字符串,对颜色进行排序......
我怎么做?
提前致谢 :-)
编辑
感谢您的评论 :-) 问题的链接 .../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;
?>
解决方案
您的代码中的主要问题是打字错误。
在 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;
}
}
推荐阅读
- python - Python mysql executemany() and commit vs many execute() and commit
- javascript - Node JS - How can I get the value outside the function?
- ios - Can I generate a QR code that contains both URL and text values?
- python - Getting less or more rows of what i should get after the re.findall search
- php - switch loop doesnt recognize zero "0" php
- r - R用括号分割字符串
- java - 在 Java 中的另一个对象中实例化一个对象(组合与继承)
- r - 如何使用数据框中另一列的数据在 R 中命名文件下载?
- java - 关于对csv文件中一行的元素进行排序并将其存储到不同的Arraylists中
- python-3.x - 如何安装缺少的 opencv 模块?