商品分享--图片分享

(1)首先来效果图

(2)二话不说,上代码(这个是在接口中实现的,使用的是phalapi框架)

public function ShareGoodInfo($goods_id)
{
	$goods_info = DI()->notorm->goods->select("goods_id,goods_name,price,peach_proportion,picture")->where("goods_id = {$goods_id}")->fetchOne();
	$dir = "http://qr.liantu.com/api.php?text=" . $this->web_url . "/h5/shoppingDetail.html?id={$goods_id}";
	//数据格式,如没有优惠券coupon_price值为0。
	$gData = [
	    'pic' => $goods_info['goods_pic'],
	    'title' => $goods_info['goods_name'],
	    'price' => $goods_info['price'],
	    'original_price' => $goods_info['peach_num'],
	];
	$time = time();
	$pic_save_url = $_SERVER['DOCUMENT_ROOT'] . '/uploads/goods_brand/' . $time . '.png';
	$common = new Model_Common();
	$common->createSharePng($gData, $dir, $pic_save_url);
	$url = $this->web_url . '/uploads/goods_brand/' . $time . '.png';
    return $rs = array('code' => 1, 'msg' => '获取成功', 'data' => $url, 'info' => $url);
}

Model文件下common.php

    /**
     * 从图片文件创建Image资源
     * @param $file 图片文件,支持url
     * @return bool|resource    成功返回图片image资源,失败返回false
     */
    public function createImageFromFile($file)
    {
        if (preg_match('/http(s)?:\/\//', $file)) {
            $fileSuffix = $this->getNetworkImgType($file);
        } else {
            $fileSuffix = pathinfo($file, PATHINFO_EXTENSION);
        }

        if (!$fileSuffix) return false;

        switch ($fileSuffix) {
            case 'jpeg':
                $theImage = @imagecreatefromjpeg($file);
                break;
            case 'jpg':
                $theImage = @imagecreatefromjpeg($file);
                break;
            case 'png':
                $theImage = @imagecreatefrompng($file);
                break;
            case 'gif':
                $theImage = @imagecreatefromgif($file);
                break;
            default:
                $theImage = @imagecreatefromstring(file_get_contents($file));
                break;
        }

        return $theImage;
    }

    /**
     * 分享图片生成
     * @param $gData  商品数据,array
     * @param $codeName 二维码图片
     * @param $fileName string 保存文件名,默认空则直接输入图片
     */
    function createSharePng($gData, $codeName, $fileName = '')
    {
        //创建画布
        $im = imagecreatetruecolor(618, 1000);

        //填充画布背景色
        $color = imagecolorallocate($im, 255, 255, 255);
        imagefill($im, 0, 0, $color);

        //字体文件
        $font_file = DI()->config->get('common.share_font');
        $font_file_bold = DI()->config->get('common.share_font_blod');

        //设定字体的颜色
        $font_color_1 = ImageColorAllocate($im, 153, 153, 153);
        $font_color_2 = ImageColorAllocate($im, 51, 51, 51);
        $font_color_3 = ImageColorAllocate($im, 129, 129, 129);
        $font_color_red = ImageColorAllocate($im, 237, 110, 29);

        $fang_bg_color = ImageColorAllocate($im, 254, 216, 217);

        //Logo
        $logo = DI()->config->get('common.share_logo');
        list($l_w, $l_h) = getimagesize($logo);
        $logoImg = @imagecreatefrompng($logo);
        imagecopyresized($im, $logoImg, 274, 28, 0, 0, 70, 70, $l_w, $l_h);
        //温馨提示
        imagettftext($im, 14, 0, 100, 130, $font_color_1, $font_file, '温馨提示:喜欢长按图片识别二维码即可前往购买');

        //商品图片
        list($g_w, $g_h) = getimagesize($gData['pic']);
        $goodImg = $this->createImageFromFile($gData['pic']);
        imagecopyresized($im, $goodImg, 0, 185, 0, 0, 618, 618, $g_w, $g_h);

        //二维码
        list($code_w, $code_h) = getimagesize($codeName);
        $codeImg = $this->createImageFromFile($codeName);
        imagecopyresized($im, $codeImg, 440, 820, 0, 0, 160, 160, $code_w, $code_h);

        //商品描述
        $theTitle = $this->cn_row_substr($gData['title'], 2, 20);


        imagettftext($im, 14, 0, 48, 845, $font_color_2, $font_file, html_entity_decode($theTitle[1]));
        imagettftext($im, 14, 0, 48, 875, $font_color_2, $font_file, $theTitle[2]);

        imagettftext($im, 16, 0, 48, 935, $font_color_2, $font_file, "价格:");

        imagettftext($im, 18, 0, 100, 935, $font_color_red, $font_file_bold, "¥" . $gData["price"]);


        //桃子抵扣数量
        if ($gData['original_price']) {
            imagettftext($im, 14, 0, 48, 970, $font_color_3, $font_file, "(桃子可抵扣¥" . $gData["original_price"] . ")");
        }

        //输出图片
        if ($fileName) {
            imagepng($im, $fileName);
        } else {
            Header("Content-Type: image/png");
            imagepng($im);
        }

        //释放空间
        imagedestroy($im);
        imagedestroy($goodImg);
        imagedestroy($codeImg);
    }


    /**
     * 获取网络图片类型
     * @param $url  网络图片url,支持不带后缀名url
     * @return bool
     */
    public function getNetworkImgType($url)
    {
        $ch = curl_init(); //初始化curl
        curl_setopt($ch, CURLOPT_URL, $url); //设置需要获取的URL
        curl_setopt($ch, CURLOPT_NOBODY, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);//设置超时
        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //支持https
        curl_exec($ch);//执行curl会话
        $http_code = curl_getinfo($ch);//获取curl连接资源句柄信息
        curl_close($ch);//关闭资源连接

        if ($http_code['http_code'] == 200) {
            $theImgType = explode('/', $http_code['content_type']);

            if ($theImgType[0] == 'image') {
                return $theImgType[1];
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值