PHP

60行代码教你用php抠图

字号+ 编辑: 国内TP粉 修订: 种花家 来源: ThinkPHP 2023-09-12 我要说两句(0)

没什么可说的, 看代码

以下是代码:

<?php
// 背景图和原图需要保持宽高要保持一样,这里的示例原图用的是蓝色背景
init();
function init(){
    $old = '001.png';
    $new = '002.png';
    //创建一个png透明图
    $img = imagecreatefrompng($old);
    setpng($img,$old,$new);
}
function setpng($imgid,$filename,$savename){
    $bg = 'bg.png';//背景图
    $new = imagecreatefrompng($bg);//创建一个png透明图
    list($width,$height)=getimagesize($filename);//获取长和宽
    $white = imagecolorallocate($imgid,0,255,0);//选择一个替换颜色。这里是绿色
    cleancolor($imgid,$white);
    imagecolortransparent($imgid,$white);//把选择的颜色替换成透明
    imagecopymerge($new,$imgid,0,0,0,0,$width,$height,100);//合并图片
    imagepng($new,$savename);//保存图片
    imagedestroy($imgid);//销毁
    imagedestroy($new);
    echo '<img src="'.$filename.'"><br /><img src="'.$savename.'">';
}
function cleancolor($imgid,$color){
    $width = imagesx($imgid);//获取宽
    $height = imagesy($imgid);//获取高
    for($i=0;$i<$width;$i++){
        for($k=0;$k<$height;$k++){
            //对比每一个像素
            $rgb = imagecolorat($imgid,$i,$k);
            $r = ($rgb >> 16)&0xff;//取R
            $g = ($rgb >> 8)&0xff;//取G
            $b = $rgb&0xff;//取B
            $randr = 1.5;
            $randg = 1;
            $randb=1;
            //蓝色RGB大致的位置。替换成绿色
            if($r<=60*$randr && $g<=200*$randg && $b<=255*$randb && $b*$randb>=100){
                    //如果能够精确的计算出要保留位置的,这里可以写绝对的数字
                if($i>=$width/2 && $i<=$width/2 && $k>=$height/2 && $k<=$height/2){
                    
                }else{
                    //改变颜色
                    imagesetpixel($imgid,$i,$k,$color);
                }
            }
        }
    }
}
阅完此文,您的感想如何?
  • 有用

    0

  • 没用

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.交流群: PHP+JS聊天群

相关课文
  • mac开发接入微信公众号接口返回报错 cURL error 56: SSLRead() return error -9806

  • pecl安装程序时报错Array and string offset access syntax with curly braces is no longer supported

  • PHP的换行符是什么

  • 由于商家传入的H5交易参数有误,该笔交易暂时无法完成,请联系商家解决

我要说说
网上宾友点评