PHP 将图片统一处理成圆形图

效果:

原始图片:

 处理好的图片

实现过程: 

    /**
     * 图片处理成圆形图片
     * @param  [string] $srcFile  [图片原始路径]
     * @param  [string] $savePath [图片保存路径+文件名]
     * @return [string] $savePath [处理好的文件存放路径]
     */
    function cmf_round_img($srcFile,$savePath) {
        //获取原图尺寸,并设置新图片的宽度和高度
        list($w, $h) = getimagesize($srcFile);
        if( $w > $h ){
          $w = $h;
        }else{
          $h = $w;
        }
        $oimgSrc = imagecreatefromstring(file_get_contents($srcFile));
        $oimgDst = imagecreatetruecolor($w, $h);
        imagealphablending($oimgDst,false);
        $transparent = imagecolorallocatealpha($oimgDst, 0, 0, 0, 127);
        $r=$w/2;
        for($x=0;$x<$w;$x++){
          for($y=0;$y<$h;$y++){
            $c = imagecolorat($oimgSrc,$x,$y);
            $_x = $x - $w/2;
            $_y = $y - $h/2;
            if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){
              imagesetpixel($oimgDst,$x,$y,$c);
            }else{
              imagesetpixel($oimgDst,$x,$y,$transparent);
            }
          }
        }
        $data = getimagesize($srcFile);
        imagesavealpha($oimgDst, true);
        imagepng($oimgDst,$savePath);
        imagedestroy($oimgDst);
        imagedestroy($oimgSrc);
        return $savePath;
    }

 注意:

        如果图片过多或者图片太大,可能会出现以下错误:

PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to allocate 17295719 bytes) in

解决方案:     

1.永久性修改php内存xianzhi

        php.ini文件中memory_limit设置的数字太大,可以将其改的大一点,或者直接memory_limit=-1,意为不设限。

2.运行文件内临时性修改memory_limit

ini_set("memory_limit", "-1");

ini_set("memory_limit", "3072M");

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值