不求人,以后自己整国庆头像

体验地址:https://www.zkcoi.com/guoqing

经过不懈地研究,继之前研究的WPJAM微信机器人,终于在公众号里整了个合成国庆头像的功能,这下可以不求人了。

不求人,以后自己整国庆头像

不求人,以后自己整国庆头像

那么通过WPJAM微信机器人处理图片即可。

//将自定义回复的关键字设置为[img],回复内容为函数回复zke_wx_img_reply

function zke_wx_img_reply($keyword, $wxObj){
         $msg_input	= file_get_contents('php://input');//获取用户在公众号发送的内容
         $msg_input	= $wxObj->decrypt($msg_input); //调用WPJAM微信机器人的解密方法
         $msg_input	= xmlToObject($msg_input);	// 去掉控制字符
         $PicUrl = (string)$msg_input->PicUrl;  //获取图片url
         $MediaId = (string)$msg_input->MediaId;//获取图片MediaId
         $result = add_flag($PicUrl,$MediaId) ;
         $result_type = substr($result, -4);
             if ($result_type === '.jpg') {
                $item	= '<item>
                	<Title><![CDATA[您的国庆头像已经制作成功]]></Title>
                	<Description><![CDATA[点击获取您的国庆头像,不满意可回复“国庆”]]></Description>
                	<PicUrl><![CDATA['.$result.']]></PicUrl>
                	<Url><![CDATA['.$result .']]></Url>
                </item>';
                $wxObj->news_reply($item);
            } else {
                 $item	= '<item>
                	<Title><![CDATA[爱国头像获取失败,点击联系zke]]></Title>
                	<Description><![CDATA[错误提示:'.$result.']]></Description>
                	<PicUrl><![CDATA[https://www.zkcoi.com/wp-content/uploads/2023/06/zk_wx_reply.png]]></PicUrl>
                	<Url><![CDATA[https://work.weixin.qq.com/kfid/kfc7d5f2527b579c8eb]]></Url>
                </item>';
                $wxObj->news_reply($item);
            }
}


function xmlToObject($xmlString) {
    $xmlObject = simplexml_load_string($xmlString, 'SimpleXMLElement', LIBXML_NOCDATA);//WPJAM微信机器人里的,直接复制过来用
    return $xmlObject;
}


//生成国庆头像的方法
function add_flag($PicUrl, $MediaId) {
    // 获取远程头像图片并保存到本地临时文件
    $temp_avatar_file = tempnam(sys_get_temp_dir(), 'avatar_');
    $avatar_data = file_get_contents($PicUrl);
    $wx_img_path = ZKEEV_URI . 'static/img/wx/';

    if ($avatar_data === false) {
        return '下载头像出错。';
    }

    if (file_put_contents($temp_avatar_file, $avatar_data) === false) {
        return '保存头像出错。';
    }

    // 获取头像图片的宽度和高度
    list($avatar_width, $avatar_height, $avatar_type) = getimagesize($temp_avatar_file);

    // 确保头像为正方形
    if ($avatar_width != $avatar_height) {
        unlink($temp_avatar_file);
        return '别搞我,头像必须得是正方形的';
    }

    // 国旗水印图片的路径
    $flag_watermark_path = $wx_img_path.'flag.png'; // 设置国旗水印图片的本地路径

    // 打开头像图片
    switch ($avatar_type) {
        case IMAGETYPE_JPEG:
            $avatar = imagecreatefromjpeg($temp_avatar_file);
            break;
        case IMAGETYPE_PNG:
            $avatar = imagecreatefrompng($temp_avatar_file);
            break;
        // 这里可以继续添加其他格式的支持
        default:
            unlink($temp_avatar_file);
            return '这个格式不支持,必须得是jpg和png的';
    }

    // 打开国旗水印图片
    $flag_watermark = imagecreatefrompng($flag_watermark_path);
    
    // 获取国旗水印图片的宽度和高度
    $flag_width = imagesx($flag_watermark);
    $flag_height = imagesy($flag_watermark);
    
    // 获取头像的宽度和高度
    $avatar_width = imagesx($avatar);
    $avatar_height = imagesy($avatar);
    
    // 计算缩放后的头像宽度和高度
    $new_width = 940;
    $new_height = 940;
    
    // 创建一个新的图像资源,用于存储缩放后的头像
    $avatar_resized = imagecreatetruecolor($new_width, $new_height);
    
    // 将原始头像缩放到新的图像资源上
    imagecopyresampled($avatar_resized, $avatar, 0, 0, 0, 0, $new_width, $new_height, $avatar_width, $avatar_height);
    
    // 将水印叠加到缩放后的头像的左上角
    imagecopy($avatar_resized, $flag_watermark, 0, 0, 0, 0, $flag_width, $flag_height);
    
    // 将缩放后的头像资源赋值给原始头像
    $avatar = $avatar_resized;

    // 生成合成后的头像文件路径
    $result_avatar_path = $wx_img_path.'/output/' . $MediaId.'.jpg';

    // 保存带有国旗水印的头像图片,并限制文件大小在150KB左右
    $quality = 90; // 初始质量
    while (true) {
        ob_start();
        imagejpeg($avatar, null, $quality);
        $output = ob_get_contents();
        ob_end_clean();
        $outputSize = strlen($output);

        if ($outputSize <= 150 * 1024 || $quality <= 10) { // 150KB,也可以根据需要调整
            file_put_contents($result_avatar_path, $output);
            break;
        }

        $quality -= 10; // 递减质量
    }

    // 销毁图像资源
    imagedestroy($avatar);

    return ZKEEV_STATIC . 'img/wx/output/' . $MediaId.'.jpg';
}

 

本文作者:𝙕𝙆𝘾𝙊𝙄

文章名称:不求人,以后自己整国庆头像

文章链接:https://www.zkcoi.com/365up/program/2771.html

本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
𝙕𝙆𝘾𝙊𝙄𝙕𝙆𝘾𝙊𝙄
上一篇 2023年9月25日 下午7:11
下一篇 2023年9月28日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

私聊博主

立即联系
一般有空就回复

qrcode_web

微信扫码联系我

分享本页
返回顶部