使用图像滤镜功能无法正确改变图像颜色

安奇

我正在使用imagefilter用于更改图像颜色的功能。但是问题是我想要的功能没有改变颜色,结果图像颜色是旧图像颜色和新图像颜色的加法。这是我的原图

在此处输入图片说明

我想更改此图像的颜色 在此处输入图片说明

但是他们像这样转换 在此处输入图片说明

这是我的代码

header('Content-Type: image/png');
$image = imagecreatefrompng('a400-d58.png');
imagefilter($image, IMG_FILTER_COLORIZE, 0, 128, 64);
imagealphablending( $image, true );
imagesavealpha( $image, true );
imagepng($image,'a400-d585.png');

当我检查图像功能是否确实添加oldimage值并给定值103,55,32 + 0,128,64 = 103,183,96这是我的新图像颜色值。

有人可以帮我怎么回事吗?

沙阿

我尝试了此方法并工作-大部分是:)我将您的棕色图像另存为img1.png。

        <?php 

    function colorizeKeepAplhaChannnel( $inputFilePathIn, $targetRedIn, $targetGreenIn, $targetBlueIn, $outputFilePathIn ) {
        $im_src = imagecreatefrompng( $inputFilePathIn );
        $im_dst = imagecreatefrompng( $inputFilePathIn );
        $width = imagesx($im_src);
        $height = imagesy($im_src);

        // Note this: FILL IMAGE WITH TRANSPARENT BG
        imagefill($im_dst, 0, 0, IMG_COLOR_TRANSPARENT);
        imagesavealpha($im_dst,true);
        imagealphablending($im_dst, true);


        $flagOK = 1;
        for( $x=0; $x<$width; $x++ ) {
            for( $y=0; $y<$height; $y++ ) {
                $rgb = imagecolorat( $im_src, $x, $y );

                $colorOldRGB = imagecolorsforindex($im_src, $rgb);
                $alpha = $colorOldRGB["alpha"];

               //echo "$colorOldRGB[red], $colorOldRGB[green],$colorOldRGB[blue] <br/>\n";

                if($colorOldRGB["red"] >150 && $colorOldRGB["green"] >150 && $colorOldRGB["blue"] >150) {
                    $newRed = $colorOldRGB["red"];
                    $newGreen = $colorOldRGB["green"];
                    $newBlue = $colorOldRGB["blue"];

                }
                else if($colorOldRGB["red"] === 0 && $colorOldRGB["green"] === 0 && $colorOldRGB["blue"] === 0) {
                    $newRed = 0;
                    $newGreen = 0;
                    $newBlue = 0;         
                }
                else {
//                    $newRed = 0 - $colorOldRGB["red"] + $targetRedIn;
//                    $newGreen =0 - $colorOldRGB["green"] + $targetGreenIn;
//                    $newBlue = 0 - $colorOldRGB["blue"] + $targetBlueIn; 


                    $newRed = $targetRedIn;
                    $newGreen =  $targetGreenIn;
                    $newBlue =  $targetBlueIn; 

                }


                if($newRed <0 ) {
                    $newRed = 0;
                }
                if($newRed >255) {
                    $newRed = 255;
                }

                if($newGreen <0){
                    $newGreen = 0;
                }
                if($newGreen>255) {
                    $newGreen = 255;
                }

                if($newBlue<0) {
                    $newBlue = 0;
                }
                if($newBlue>255) {
                    $newBlue = 255;
                }




                //$colorNew = imagecolorallocatealpha($im_src, $targetRedIn, $targetGreenIn, $targetBlueIn, $alpha);
                $colorNew = imagecolorallocatealpha($im_src, $newRed, $newGreen, $newBlue, $alpha);

                $flagFoundColor = true;
                // uncomment next 3 lines to substitute only 1 color (in this case, BLACK/greys)
    /*
                $colorOld = imagecolorallocatealpha($im_src, $colorOldRGB["red"], $colorOldRGB["green"], $colorOldRGB["blue"], 0); // original color WITHOUT alpha channel
                $color2Change = imagecolorallocatealpha($im_src, 0, 0, 0, 0); // opaque BLACK - change to desired color
                $flagFoundColor = ($color2Change == $colorOld);
    */

                if ( false === $colorNew ) {
                    //echo( "FALSE COLOR:$colorNew alpha:$alpha<br/>" );
                    $flagOK = 0; 
                } else if ($flagFoundColor) {
                    imagesetpixel( $im_dst, $x, $y, $colorNew );
                    //echo "x:$x y:$y col=$colorNew alpha:$alpha<br/>";
                } 
            }
        }
        $flagOK2 = imagepng($im_dst, $outputFilePathIn);

        if ($flagOK && $flagOK2) {
            echo ("<strong>Congratulations, your conversion was successful </strong><br/>new file $outputFilePathIn<br/>");
        } else if ($flagOK2 && !$flagOK) {
            echo ("<strong>ERROR, your conversion was UNsuccessful</strong><br/>Please verify if your PNG is truecolor<br/>input file $inputFilePathIn<br/>");
        } else if (!$flagOK2 && $flagOK) {
            $dirNameOutput = dirname($outputFilePathIn)."/";
            echo ("<strong>ERROR, your conversion was successful, but could not save file</strong><br/>Please verify that you have PERMISSION to save to directory $dirName <br/>input file $inputFilePathIn<br/>");
        } else {
            $dirNameOutput = dirname($outputFilePathIn)."/";
            echo ("<strong>ERROR, your conversion was UNsuccessful AND could not save file</strong><br/>Please verify if your PNG is truecolor<br/>Please verify that you have PERMISSION to save to directory $dirName <br/>input file $inputFilePathIn<br/>");
        }

        echo ("TargetName:$outputFilePathIn wid:$width height:$height CONVERTED:|$flagOK| SAVED:|$flagOK2|<br/>");
        imagedestroy($im_dst);
        imagedestroy($im_src);
    }

    $targetRed = 0;
    $targetGreen = 128;
    $targetBlue = 64;

    //$inputFileName = 'frameSquareBlack_88x110.png';
    $inputFileName = 'img1.png';
    $dirName = "./images/";
    $nameTemp = basename($inputFileName, ".png");
    $outputFileName = $nameTemp."_$targetRed"."_$targetGreen"."_$targetBlue.png";
    $inputFilePath = $dirName.$inputFileName;
    $outputFilePath = $dirName.$outputFileName;

    //echo "inputFileName:$inputFilePath<br>outputName:$outputFilePath<br>";
    colorizeKeepAplhaChannnel( $inputFilePath, $targetRed, $targetGreen, $targetBlue, $outputFilePath);
    ?>
    <br/><br/>
    Original <br/>
    <img src="<?php echo $inputFilePath; ?>">
    <br /><br />Colorized<br/>
    <img src="<?php echo $outputFilePath; ?>">
    <br />

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法使用SVG滤镜正确更改图像的颜色

来自分类Dev

使用ColorMatrixColorFilter的图像滤镜

来自分类Dev

改变图像的颜色

来自分类Dev

如何改变图像的颜色?

来自分类Dev

改变图像的颜色

来自分类Dev

pyplot 正在改变图像的颜色

来自分类Dev

使用图像功能进行颜色分配

来自分类Dev

C#无法使用正确的颜色映射显示RAW16灰度图像

来自分类Dev

我可以在fabricjs中使用图像滤镜在单个图像上应用两种阴影颜色吗?

来自分类Dev

在PHP中使用线性滤镜锐化图像

来自分类Dev

使用非均匀滤镜模糊图像

来自分类Dev

枕头:无法在CMYK图像中以正确的颜色绘制文本

来自分类Dev

自定义核心图像滤镜颜色问题

来自分类Dev

自定义核心图像滤镜颜色问题

来自分类Dev

使用精灵表无法正确渲染图像

来自分类Dev

有什么办法可以改变图像的颜色?

来自分类Dev

加载时Swift会改变图像的颜色

来自分类Dev

Objective-C 改变图像颜色表现

来自分类Dev

在WPF功能区控件中无法正确渲染图像

来自分类Dev

无法正确旋转图像

来自分类Dev

如何正确将滤镜应用于图像阵列?

来自分类Dev

FFMPEG-使用带有多个透明图像的复杂滤镜无法显示Drawtest

来自分类Dev

使用onclick功能更改图像的颜色不起作用?

来自分类Dev

使用 ImageMagick 递归转换所有图像颜色的正确命令

来自分类Dev

无法更改图像视图的图像颜色

来自分类Dev

iOS GPU图像滤镜无法混入视频缓冲区

来自分类Dev

图像无法正确放入圆形图像视图

来自分类Dev

无法从功能获取图像URL

来自分类Dev

ImageView无法正确拉伸图像