2016-07-06 19 views
2

Ich verwende imagefilter Funktion zum Ändern der Bildfarbe. Aber das Problem ist eine Funktion nicht die Farbe zu ändern, was ich will und das Ergebnis Bildfarbe ist die Ergänzung der alten Bildfarbe und neue Bildfarbe. Dieses ist mein ursprüngliches BildBildfarbe nicht richtig ändern mit Bildfilterfunktion

enter image description here

und ich möchte in enter image description here

dieses Bild Farbe ändern, aber sie wandeln wie diese enter image description here

Hier ist mein Code

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'); 

Wenn ich die Bildfunktion überprüfe, wird der alte Bildwert hinzugefügt und gegeben Wert 103,55,32 + 0,128,64 = 103,183,96 das ist mein neuer Bildfarbwert.

kann mir jemand helfen, was schief geht?

+0

Look at this - http://stackoverflow.com/questions/4902452/how-can-i-replace-one-color-with-another-in-a-png-24-alpha-transparent- image-wit –

+0

ok ich werde es versuchen. – ankit

+0

Nein @ T.Shah es ist nicht funktionieren. – ankit

Antwort

1

Ich habe das versucht und gearbeitet - meistens :) Ich habe dein braunes Bild als img1.png gespeichert.

 <?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 /> 
+0

Aber sie konvertieren nicht wie ich will. Schauen Sie braunes Bild im Mittelteil Weißabschnitt vorhanden an und wenn wir konvertieren, konvertieren sie alle Bilder. – ankit

+0

Versuchen Sie, den weißen Teil im Originalbild in transparent zu konvertieren. Nicht sicher, ob das funktioniert oder nicht. –

+0

Nein, wir können sie nicht transparent machen, so wie sie sind. – ankit