我想问一下,如何让第一张图片成为第二张图片? 从某种意义上说,背景的第一个图像是不透明的,我会改变图像上的透明度变得像第二张图片? 你是如何用PHP做的? 我真的不知道
谢谢
答案 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。
此代码也适用于彩色图像,但整个图像将是半透明的。除了黑色。