互动拍照 — 移动端网页照片展示、提取与微信分享

开发准备

互动拍照应用完成了照片的拍摄,上传之后,一般会需要提供供给用户扫码提取电子档照片的服务。

拍摄与上传可以参考:【互动多媒体】应用形式(一)互动拍照 里面的软件开发文章。

我使用的是PHP去写这个网页服务,服务器用的是阿里云,服务器搭建用的是宝塔面板,包含php5.6的环境和ngix。

PHP代码

那么以下php文件需要放在域名所搜索的路径下面:

<?php
require_once "jssdk.php";
$jssdk = new JSSDK("这里写你的微信APPID", "这里写你的APPSECRET");
$signPackage = $jssdk->GetSignPackage();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>提取照片</title>
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0">
</head>
<body>
    <div style='margin:0 auto;width:0px;height:0px;overflow:hidden;'>
        <img src="./weixin.jpg" width='700'>
    </div>
<?php
    $file = $_GET['filename'];
    $fullpath = './Photos/'.$file;
    if(file_exists($fullpath))
    {
        echo " <div id=\"bg\" style=\"position:absolute;z-index:0;width:100%;top:0px;left:0px;\">
	                <img src='./img/background.jpg' width=\"100%\" height=\"100%\"/>
                </div>
                <div id=\"tex\" style=\"position:absolute;left:0%;top:0%;width:100%;z-index:20\">
	                <img src='$fullpath' width=\"100%\" height=\"100%\"/>
                </div>
                <div id=\"tex\" style=\"position:absolute;left:0px;top:0px;width:100%;height:100%;z-index:30;opacity:0\">
	                <img src='$fullpath' width=\"100%\" height=\"100%\"/>
                </div>
                ";
    }
    else
    {
        echo "<img src='./img/404.jpg'  width='100%'>";
        echo "<p style='text-align:center'><a href='这些替换为当前脚本url及参数?filename=".$file."'><img src='./img/refresh.jpg' width='33%'></a></p>";
    }

?>
</body>
</html>

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
    /*
     * 注意:
     * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
     * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
     * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
     *
     * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
     * 邮箱地址:weixin-open@qq.com
     * 邮件主题:【微信JS-SDK反馈】具体问题
     * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
     */
    wx.config({
        debug: false,
        appId: '<?php echo $signPackage["appId"];?>',
        timestamp: <?php echo $signPackage["timestamp"];?>,
        nonceStr: '<?php echo $signPackage["nonceStr"];?>',
        signature: '<?php echo $signPackage["signature"];?>',
        jsApiList: [
            // 所有要调用的 API 都要加到这个列表中
            'checkJsApi',  //判断当前客户端版本是否支持指定JS接口
            'onMenuShareTimeline', //分享到朋友圈
            'onMenuShareAppMessage', //分享给好友
            'onMenuShareQQ',  //分享到QQ
            'onMenuShareWeibo' //分享到微博
        ]
    });
    wx.ready(function () {
        // 在这里调用 API 这个是发送给朋友
        wx.onMenuShareAppMessage({
            title: '我的照片', // 分享标题
            desc: '请看我的照片', // 分享描述
            link: '', // 分享链接
            imgUrl: '这里替换为分享链接的小图标的url路径', // 分享图标 //
            type: '', // 分享类型,music、video或link,不填默认为link
            dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
            success: function () {
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
        });
        //这个是分享到朋友圈,没有desc描述
        wx.onMenuShareTimeline({
            title: '我的照片', // 分享标题
            link: '', // 分享链接
            imgUrl: '这里替换为分享链接的小图标的url路径', // 分享图标
            success: function () {
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
        });
    });
</script>

几个问题

1 脚本用到了微信分享,关于php微信分享我会另开文章做介绍,在这里主要是会用到jssdk.php,这个官方也能下载到,它会完成token的获取与刷新,主要是产生access_token.php和jsapi_ticket.php两个保存token和ticket的脚本,对于分享,其实只有access_token是有用的。所以需要穿进去你微信公众号的APPID和APPSECRET,这一段完全就是为了最下面script标签里面的内容所需要的变量服务的。

<?php
require_once "jssdk.php";
$jssdk = new JSSDK("这里写你的微信APPID", "这里写你的APPSECRET");
$signPackage = $jssdk->GetSignPackage();
?>

2 脚本中有一个div,是用来锁定分享网页的图标,这一点在早期有用,但是如果你是微信分享,其实微信的API已经可以让你去设置,和这个div就没有关系。

    <div style='margin:0 auto;width:0px;height:0px;overflow:hidden;'>
        <img src="./weixin.jpg" width='700'>
    </div>

3 脚本是通过GET方式获取参数,参数就是filename,它会去当前路径的Photos文件夹下查找图片,如果没有,会进入404页面,404页面就一个刷新按钮,这个按钮对应的链接就是上述php网页的url。

4 如果文件存在,会echo三段内容:

    <div id=\"bg\" style=\"position:absolute;z-index:0;width:100%;top:0px;left:0px;\">
        <img src='./img/background.jpg' width=\"100%\" height=\"100%\"/>
    </div>

第一段就是设置一个背景图,如果有不同的活动直接替换背景图就好了。由于对css不熟悉,所以都写的是段内样式,而且没有做响应式布局,当时也不懂设备尺寸不同应该怎么写不同的样式,不懂rem和bootstrap之类的框架。一般来说,只要背景图本身画面拉升没有与图片关联性太强的内容元素就可以。

    <div id=\"tex\" style=\"position:absolute;left:0%;top:0%;width:100%;z-index:20\">
        <img src='$fullpath' width=\"100%\" height=\"100%\"/>
    /div>

第二段就是照片展示,通过left top width你可以设置照片希望出现的大小和位置

    <div id=\"tex\" style=\"position:absolute;left:0px;top:0px;width:100%;height:100%;z-index:30;opacity:0\">
        <img src='$fullpath' width=\"100%\" height=\"100%\"/>
    </div>

第三段是一个全屏的需要展示照片的元素,这个元素的opacity是0,所以是不可见的,这是为了实现,无论手机页面上在哪里长按都能触发去下载电子档照片的需求。

5 微信这一段代码的主要需要设置的就是,title,desc,和imgurl(分享图标文件的链接),代码有一定的注释,这里主要说一下这个图标图片文件最后是400*400以内。而且由于缓存机制的存在,你修改了之后,不会立即生效,你需要等待,然后清浏览器缓存来查看。

 

文中所述的实现方法比较快餐,如有不合适的地方,欢迎指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值