使用php

时间:2017-12-08 02:20:42

标签: php codeigniter-3

我想问一下,如何让第一张图片成为第二张图片? 从某种意义上说,背景的第一个图像是不透明的,我会改变图像上的透明度变得像第二张图片? 你是如何用PHP做的? 我真的不知道

谢谢

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您只有图像B& W,则可以在所有像素中打破白色。

<?php
  $url = "IUWBw.jpg";
  $image = imagecreatefromjpeg($url);//get your image
  //get size
  $width = imagesx($image);
  $height = imagesy($image);
  //create new image
  $out = ImageCreateTrueColor($width,$height);

  //configuration for make alpha color
  imagealphablending($out,false);
  imagesavealpha($out, true);

  for($x = $width-1;$x>=0;$x--){
    for($y = $height-1;$y>=0;$y--){
        $rgb = imagecolorat($image,$x,$y);//get pixel color of original image
        $r =   $rgb >> 16;
        $g =   ord(chr($rgb >> 8)); 
        $b =   ord(chr($rgb));
        if( $rgb != 0 ){ //if pixel is not black
            //if red is the low color
            if($r<$g && $r < $b){
                $alpha =  ($r / 2);
                $g-=$r;$b-=$r; $r=0;
            }
            //if green is the low color
            if($g<$r && $g < $b){
                $alpha =  ($g / 2);
                 $r-=$g;$b-=$g;$g=0;
            }
            //if blue is the low color
            if($b<$r && $b < $g){
                 $alpha =($b / 2);
                $r-=$b; $g-=$b;$b=0;  
            }
            //if we all have equal value
            if($b == $r && $b == $g){
                 $alpha = ($b / 2);
                $r-=$b; $g-=$b;$b=0;  
            }

            $color = $alpha << 24 | $r << 16 | $g << 8 | $b;

            imagesetpixel($out,$x,$y,$color);

        }else{//else is black just write 
                imagesetpixel($out,$x,$y,$rgb);
        }
    }
  }


    $urlout = preg_replace("#(.+).jpe?g#i","$1.png",$url);

    imagepng($out,$urlout);
    echo "image writeted: ".$urlout;
    imagedestroy($out);
    imagedestroy($image);

?>

此代码查找一个像素的低值并从另一个值中减去它。

例如:一个像素,因此值为,r:255 g:226 b:255 他把它变成r:29 g:0 b:29;

既然像素没有白色值,那么仍然需要放置适当的alpha。 'g'的值在转换之前除以2。除以2,因为alpha支持的值为127而不是255。 a = g / 2 = 226/2 = 113。

此代码也适用于彩色图像,但整个图像将是半透明的。除了黑色。