前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP缩放并合成图片

PHP缩放并合成图片

作者头像
Sindsun
发布2019-12-11 16:33:41
1.4K0
发布2019-12-11 16:33:41
举报
文章被收录于专栏:狂码一生狂码一生

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

代码语言:javascript
复制
    /**
    * 缩放并合成图片
    * @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[ ](https://cloud.tencent.com/developer/article/1552510)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档