Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何解决:HSI到RGB转换导致RBG颜色超过255_Php_Image Processing_Computer Vision_Rgb - Fatal编程技术网

Php 如何解决:HSI到RGB转换导致RBG颜色超过255

Php 如何解决:HSI到RGB转换导致RBG颜色超过255,php,image-processing,computer-vision,rgb,Php,Image Processing,Computer Vision,Rgb,编辑:谢谢所有帮助过你的人,但问题仍然存在。那么,有没有更好的公式来编辑饱和度而不需要夹紧?非线性公式可能有用,但我不知道确切的好公式。Thx 我正在尝试开发一个照片编辑系统,允许人们增加和减少色调/饱和度/亮度,这类似于ipiccy.com。 我正在使用HSIRGB转换。 首先,将每个像素从RGB转换为HSI。 其次,用户指定要添加的饱和度。 第三,系统将用户指定的值添加到第一步转换的原始饱和度值中,然后将这些HSI值转换为RGB。 我的问题是,当我将新的HSI值转换回RGB时,一些RGB值超

编辑:谢谢所有帮助过你的人,但问题仍然存在。那么,有没有更好的公式来编辑饱和度而不需要夹紧?非线性公式可能有用,但我不知道确切的好公式。Thx

我正在尝试开发一个照片编辑系统,允许人们增加和减少色调/饱和度/亮度,这类似于ipiccy.com。 我正在使用HSIRGB转换。 首先,将每个像素从RGB转换为HSI。 其次,用户指定要添加的饱和度。 第三,系统将用户指定的值添加到第一步转换的原始饱和度值中,然后将这些HSI值转换为RGB。 我的问题是,当我将新的HSI值转换回RGB时,一些RGB值超过255。因此,颜色显示不正确


我已经阅读和尝试了好几天了,但没有成功。有人知道怎么解决吗?欢迎提供任何线索或链接阅读或解答。非常感谢

这完全取决于你如何改变饱和值。如果执行简单的加法,则绝对必须使用钳制,即将255以上的值截断为255。对于零下的值也是如此。 这将导致一些颜色重叠。 您也可以使用不同的公式使溢出更加困难,但这可能会导致用户不理解的行为。 事实上,当你改变一张图片时,由于截短而导致的信息丢失几乎是一个已知的事实。 我会尝试向用户发出警告,并提供撤销功能:例如,将过饱和区域显示为白色或洋红色,或者像某些相机那样闪烁。
不让用户造成信息丢失会太多地限制用户交互,这取决于你如何改变饱和值。如果执行简单的加法,则绝对必须使用钳制,即将255以上的值截断为255。对于零下的值也是如此。 这将导致一些颜色重叠。 您也可以使用不同的公式使溢出更加困难,但这可能会导致用户不理解的行为。 事实上,当你改变一张图片时,由于截短而导致的信息丢失几乎是一个已知的事实。 我会尝试向用户发出警告,并提供撤销功能:例如,将过饱和区域显示为白色或洋红色,或者像某些相机那样闪烁。 IMHO说,阻止用户造成信息丢失会极大地限制用户交互

不需要删除。代码的格式确实很糟糕,但感谢您提供它

这段代码是由另一个和我一起处理同一问题的人发送给我的,我已经收到了它的确切形式,我将把它交给你。我所做的只是在代码中实现它,所以请原谅这个错误的答案

(3项职能)

gimmeHSL()
将从RGB转换为HSL

IN:R,G,B{0,255},{0,255},{0,255}

OUT:H,S,L{0,360},{0,1},{0,1}

gimmeRGB()
将从RGB转换为HSL

IN:H,S,L{0,360},{0,1},{0,1}

OUT:R,G,B{0,255},{0,255},{0,255}

magic\u kristo()
,我不知道它是做什么的,但它似乎被其他两个使用过

下面是一个用法示例

print_r(gimmeRGB(gimmeHSL(200,153,148)));
注意:即使这是有帮助的,请不要高估它,我会感觉非常糟糕。只要使用它,如果它有效的话,也许会留下评论

function gimmeHSL($zk0,$ns1=null,$wo2=null){if(is_array($zk0)&&sizeof($zk0)==3)list($tm3,$ns1,$wo2)=$zk0;
else $tm3=$zk0;$ck4=min($tm3,$ns1,$wo2);$pw5=max($tm3,$ns1,$wo2);$qe6=$pw5-$ck4;
$up7=($pw5+$ck4)/510;if(0 ==$qe6){$li8=0;$wu9=0;}else{if(0.5>$up7){$wu9=$qe6/($pw5+$ck4);}else{$wu9=$qe6/(510-$pw5-$ck4);}
if($pw5==$tm3){$li8=($ns1-$wo2)/(6.0*$qe6);}
else if($pw5==$hd10){$li8=1/3+($wo2-$tm3)/(6.0*$qe6);}else{$li8=2/3+($tm3-$ns1)/(6.0*$qe6);}
if(0>$li8)$li8+=1;if(1<$li8)$li8-=1;}$li8=round($li8*360);return array($li8,$wu9,$up7);}
function gimmeRGB($np11,$vs12=null,$pp13=null){if(is_array($np11)&&sizeof($np11)==3)list($zg14,$vs12,$pp13)=$np11;
else $zg14=$np11;if($vs12==0){$tm3=$ns1=$wo2=round($pp13*255);}else{if($pp13<=0.5){$oo15=$pp13*($vs12+1);}
else{$oo15=$pp13+$vs12-$pp13*$vs12;}$qw16=$pp13*2-$oo15;$qk17=$zg14/360;$tm3=magic_kristo($qw16,$oo15,$qk17+1/3);
$ns1=magic_kristo($qw16,$oo15,$qk17);$wo2=magic_kristo($qw16,$oo15,$qk17-1/3);}return array($tm3,$ns1,$wo2);}
function magic_kristo($qw16,$oo15,$qk17){if($qk17<0)$qk17+=1;else if($qk17>1)$qk17-=1;
if(6*$qk17<1)$sx18=$qw16+($oo15-$qw16)*$qk17*6;else if(2*$qk17<1)$sx18=$oo15;else if(3*$qk17<2)$sx18=$qw16+($oo15-$qw16)*(2/3-$qk17)*6;
else $sx18=$qw16;return round(255*$sx18);}
函数gimmeHSL($zk0,$ns1=null,$wo2=null){if(is_数组($zk0)&&sizeof($zk0)==3)list($tm3,$ns1,$wo2)=$zk0;
else$tm3=$zk0;$ck4=min($tm3,$ns1,$wo2);$pw5=max($tm3,$ns1,$wo2);$qe6=$pw5-$ck4;
$up7=($pw5+$ck4)/510;if(0=$qe6){$li8=0;$wu9=0;}else{if(0.5>$up7){$wu9=$qe6/($pw5+$ck4);}else{$wu9=$qe6/(510-$pw5-$ck4);}
如果($pw5==$tm3){$li8=($ns1-$wo2)/(6.0*$qe6);}
else-if($pw5==$hd10){$li8=1/3+($wo2-$tm3)/(6.0*$qe6);}else{$li8=2/3+($tm3-$ns1)/(6.0*$qe6);}
如果(0>$li8)$li8+=1;如果(1)
不需要删除。代码的格式确实很糟糕,但感谢您提供它

这段代码是由另一个和我一起处理同一问题的人发送给我的,我收到了它的确切形式,我将把它交给你。我所做的只是在我的代码中实现它,所以请原谅这个错误的答案

(3项职能)

gimmeHSL()
将从RGB转换为HSL

IN:R,G,B{0,255},{0,255},{0,255}

OUT:H,S,L{0,360},{0,1},{0,1}

gimmeRGB()
将从RGB转换为HSL

IN:H,S,L{0,360},{0,1},{0,1}

OUT:R,G,B{0,255},{0,255},{0,255}

magic\u kristo()
,我不知道它是做什么的,但它似乎被其他两个使用过

下面是一个用法示例

print_r(gimmeRGB(gimmeHSL(200,153,148)));
注意:即使这是有用的,请不要投票,我会感觉很糟糕。使用它,如果它有效的话,也许会留下评论

function gimmeHSL($zk0,$ns1=null,$wo2=null){if(is_array($zk0)&&sizeof($zk0)==3)list($tm3,$ns1,$wo2)=$zk0;
else $tm3=$zk0;$ck4=min($tm3,$ns1,$wo2);$pw5=max($tm3,$ns1,$wo2);$qe6=$pw5-$ck4;
$up7=($pw5+$ck4)/510;if(0 ==$qe6){$li8=0;$wu9=0;}else{if(0.5>$up7){$wu9=$qe6/($pw5+$ck4);}else{$wu9=$qe6/(510-$pw5-$ck4);}
if($pw5==$tm3){$li8=($ns1-$wo2)/(6.0*$qe6);}
else if($pw5==$hd10){$li8=1/3+($wo2-$tm3)/(6.0*$qe6);}else{$li8=2/3+($tm3-$ns1)/(6.0*$qe6);}
if(0>$li8)$li8+=1;if(1<$li8)$li8-=1;}$li8=round($li8*360);return array($li8,$wu9,$up7);}
function gimmeRGB($np11,$vs12=null,$pp13=null){if(is_array($np11)&&sizeof($np11)==3)list($zg14,$vs12,$pp13)=$np11;
else $zg14=$np11;if($vs12==0){$tm3=$ns1=$wo2=round($pp13*255);}else{if($pp13<=0.5){$oo15=$pp13*($vs12+1);}
else{$oo15=$pp13+$vs12-$pp13*$vs12;}$qw16=$pp13*2-$oo15;$qk17=$zg14/360;$tm3=magic_kristo($qw16,$oo15,$qk17+1/3);
$ns1=magic_kristo($qw16,$oo15,$qk17);$wo2=magic_kristo($qw16,$oo15,$qk17-1/3);}return array($tm3,$ns1,$wo2);}
function magic_kristo($qw16,$oo15,$qk17){if($qk17<0)$qk17+=1;else if($qk17>1)$qk17-=1;
if(6*$qk17<1)$sx18=$qw16+($oo15-$qw16)*$qk17*6;else if(2*$qk17<1)$sx18=$oo15;else if(3*$qk17<2)$sx18=$qw16+($oo15-$qw16)*(2/3-$qk17)*6;
else $sx18=$qw16;return round(255*$sx18);}
函数gimmeHSL($zk0,$ns1=null,$wo2=null){if(is_数组($zk0)&&sizeof($zk0)==3)list($tm3,$ns1,$wo2)=$zk0;
else$tm3=$zk0;$ck4=min($tm3,$ns1,$wo2);$pw5=max($tm3,$ns1,$wo2);$qe6=$pw5-$ck4;
$up7=($pw5+$ck4)/510;if(0=$qe6){$li8=0;$wu9=0;}else{if(0.5>$up7){$wu9=$qe6/($pw5+$ck4);}else{$wu9=$qe6/(510-$pw5-$ck4);}
如果($pw5==$tm3){$li8=($ns1-$wo2)/(6.0*$qe6);}
else-if($pw5==$hd10){$li8=1/3+($wo2-$tm3)/(6.0*$qe6);}else{$li8=2/3+($tm3-$ns1)/(6.0*$qe6);}

如果(0>$li8)$li8+=1;如果(嘿,我们刚遇到你,这是疯狂的,我们没有水晶球,所以显示你的代码,也许这是很常见的颜色操作。你需要剪辑或夹住个别值。我自己的C++代码是在HIT,THX。代码添加。Ya.我读了很多来源,这是常见的,但我找不到解决方案,我没有LUC。到目前为止,我的猜测是:不久前,我正处于使用PHP的确切情况下(尽管不同的用例).我会翻查我的文件,给你优化过的函数。那么给我们看看你试过什么?输入是什么?新的饱和度值是什么?输出是什么?嘿,我们刚见过你,这太疯狂了,我们没有水晶球,所以展示你的代码,也许吧?这在色彩操纵中很常见