狂码一生_优质编程技术资源与您共享

狂码一生_优质编程技术资源与您共享

狂码一生技术博客站主要是以优质编程技术资源共享为核心,以交流学习为目的搭建的在线平台。我们共享一些优质的资源出来,供同行业的同胞交流与学习,让彼此之间在自身的技术上得到提升,本站主要提供程序方面的资源给大家,像PHP,C++,Javascript,html,asp.net,数据库等等方面的资源,本站计划将在后期会不断完善,建设更多类目的资源,希望能得到更多同行的支持!

PHP缩放并合成图片

直接放代码,有需要优化的地方请各自进行优化:

    /**
    * 缩放并合成图片
    * @desc: 函数用途描述信息
    * @author: Sindsun
    * @email: 2361313833@qq.com
    * @date: 2019年7月13日
    * @param $baseImagePath 主图,可以是远程图片
    * @param: $fromImagePath 来源图片,可以是远程图片
    * @param $pointX 要合并在上层的图片x位置
    * @param $pointY 要合并在上层的图片y位置
    * @param $topWith 指定在上层合并的图片的缩放后的大小
    * @param $topHeight 指定在上层合并的图片的缩放后的高度
    * @return   
    */
    public function compositeImage($baseImagePath, $fromImagePath, $pointX=0, $pointY=0, $topWith=0, $topHeight=0){
        //背景图片对象
        $baseImageInfo = getimagesize($baseImagePath);
        $type = image_type_to_extension($baseImageInfo[2], false);
        $imageCreateBaseFunc = "imagecreatefrom{$type}";
        //设置两张图片对象
        $baseImage = $imageCreateBaseFunc($baseImagePath);
        //要合成的图修复对象
        //获取图片信息
        $fromImageInfo = getimagesize($fromImagePath);
        if(!isset($fromImageInfo['bits']) || $fromImageInfo['bits'] <= 1024){
            $fromImagePath = 'http://resource.test.com/avatar/default.png';
        }
        //如果图片不合格,使用默认的
        $fromImageInfo = getimagesize($fromImagePath);
        //获取图片类型,jpg等
        $type = image_type_to_extension($fromImageInfo[2], false);
        //获取相应方法
        $imageCreateFromFunc = "imagecreatefrom{$type}";
        $fromImage = $imageCreateFromFunc($fromImagePath);
        //缩放图片
        // 获取图像信息
        list($bigWidth, $bigHight) = $fromImageInfo;
        //图片缩放,可以根据原图片大小在这里计算等比缩放
        $width = ($topWith == 0) ? 100 : $topWith; 
        $height = ($topHeight == 0) ? 100 : $topHeight; 
        
        // 创建缩略图画板
        $newImage = imagecreatetruecolor($width, $height);
        // 启用混色模式
        imagealphablending($newImage, false);
        // 保存PNG alpha通道信息
        imagesavealpha($newImage, true);
        //缩放
        imagecopyresampled($newImage, $fromImage, 0, 0, 0, 0, $width, $height, $bigWidth, $bigHight);
        
        //合成图片
        //imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )---拷贝并合并图像的一部分
        //将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
        //imagecopymerge($baseImage, $fromImage, 0, 0, 0, 0, imagesx($fromImage), imagesy($fromImage), 100);
        imagecopymerge($baseImage, $newImage, $pointX, $pointY, 0, 0, $width, $height, 100);
        
        //向图片上写字
        if(!empty($writeText)){
            $penColor = imagecolorallocate($baseImage, 255, 255, 255);
            //文件格式为gbk,而这里转为uft-8格式,才能正常输出,否则也为乱码。表示不明
            $str = $writeText; //iconv("gb2312", "utf-8", $writeText);
            $font = $this->RS_ROOT . 'fonts/SIMHEI.TTF';
            imagettftext($baseImage, 46, 0, 210, 110, $penColor, $font, $str);
        }
        
        ob_clean();
        header('Content-type:image/jpeg');
        imagejpeg($baseImage) or die('创建图形失败');
    }


版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编],
转载请备注出处: [
狂码一生 ] http://www.sindsun.com/article-details-118.html
[若此文确切存在侵权,请联系本站管理员进行删除!]

评论