简单的php图片上传自动给图片加水印

 更新时间:2016年11月25日 17:23  点击:1968
给自己网站上的图片添加水印,在图片上留下属于自己的信息,这有两个好处:一是宣传自己的品牌,二是就算带图片的文章被转载了,也会自动的留下了版权。

本文主要实现了php图片上传自动给图片加水印,在下篇中我会给出用php添加文字水印的代码。

php给图片加水印其实很简单,没有想象的那么神奇,就是利用了php里面的一个GD库。说起GD库,其实就是php里面一个专门用于处理图片有关的扩展,比如我们熟悉的验证码、生成缩略图,包括今天所说的php给图片加水印都是要有GD库的支持。

提示:新安装的php环境,可能需要开启GD库,开启方法:打开php.ini,去掉extension=php_gd2.dll前面的“;”然后重启apache/iis即可。

实现并不复杂,核心代码还不到20行,主要是掌握几个函数就行了。

实现源码:

 代码如下 复制代码

<?php
 $ori_img = "images/13801220684507.jpg"; //原图
 $water_img = "logo.png"; //水印
 $new_img = "images/daixiaorui.jpg"; //生成水印后的图片
 
 $original = getimagesize($ori_img); //得到图片的信息,可以print_r($original)发现它就是一个数组
 $watermark = getimagesize($water_img);
 
 $s_original = imgCreateFrom($ori_img, $original[2]); //$original[2]是图片类型,其中1表示gif、2表示jpg、3表示png
 $s_watermark = imgCreateFrom($water_img, $watermark[2]);
 
 $posX = $original[0] - $watermark[0]-6; //X坐标(右下角)
 $poxY = $original[1] - $watermark[1]-3; //Y坐标(右下角)

 //打水印
 imagecopy($s_original, $s_watermark, $posX, $poxY, 0, 0, $watermark[0], $watermark[1]);
 //header("Content-type:image/jpeg");
 //imagejpeg($s_original); //向浏览器输出图片
 $loop = imagejpeg($s_original, $new_img); //生成新的图片(jpg格式),如果用imagepng可以生成png格式
 if($loop){
  echo "水印添加成功!";
 }
 
 //根据文件类型 创建一个新图象
 function imgCreateFrom($img_src, $val){
  switch($val){
   case 1 : $img = imagecreatefromgif($img_src);
    break;
   case 2 : $img = imagecreatefromjpeg($img_src);
    break;
   case 3 : $img = imagecreatefrompng($img_src);
    break;
  }
  return $img;
 } 
?>

给图片添加水印除了用基础的GD库实现,其实还可以ImageMagick这个工具,它的功能更强大,不过一般没多大需求,就用上面这个代码了。

要对微信公众平台进行开发,首先需要成为开发者,可以到https://mp.weixin.qq.com/注册一个帐号,然后按要求填写相关信息即可。
有了公众号后,在公众平台的高级功能里选择开发模式,然后在服务器配置那里填写URL和Token两个选项,Token可以随便定义,一般是英文字母加数字,但对于URL就有一点难度了,最好有自己的主机或者虚似空间,没有的最好到新浪那里注册一个免费的空间。
 
技术方面,我最讨厌理论的东西了,我喜欢实例操作,相信很多人也是这样吧,那下面我就把我的操作过程写下来吧。
下面是我的操作记录,图也截下来了,如果上面的要求都满足了,不妨也跟着步骤操作一下。
 
1、下载微信公从平台官方的示例文件
到“http://mp.weixin.qq.com/wiki/index.php?title=接入指南”,找下载PHP求例代码,如图
微信公众平台开发入门教程
 
2、获取URL
解压上面下载的文件后得到wx_sample.php,这里我把它重命名为wx.php,然后我到我的空间根目录新建一个文件夹api,再把wx.php文件上传到目录api里,这样我就获取到了,我的URL为http://w3note.com/api/wx.php,Token我就取名为w3note吧。
 
3、修改示例文件
上一步我们已经拥有了URL和Token,在填写公众平台开发模式下的服务器配置之前,先把我们先前上传的wx.php文件下载打开,找到”define("TOKEN", "weixin");“,这里我把weixin替换成我的Token名称为w3note,然后保存,上传覆盖,如图所示
微信公众平台开发入门教程
4、填写服务器配置
在微信公众平台的开发模式的服务器配置那里填写上面获取的URL和Token信息,然后提交,成功后,会有提示,“你已成为开发者”,如图所示,
微信公众平台开发入门教程
 
到这里,我已经成为开发者了,这是开发微信公众平台的开始!可能我们还对成为开发者能做什么一无所知,下面我就做一个实验,算作”扫肓“吧。
 
打开wx.php,写一个语句,调用接收器方法,如下图红框,
微信公众平台开发入门教程
 
然后找到第49行,给$contentStr重新赋值为"hello world!",如图
微信公众平台开发入门教程
 
接下来,用微信号和微信公众号通讯。
首先我用我的手机微信扫一下下面的图,然后关注w3note这个公众号。
微信公众平台开发入门教程
为了测试方便,我就登录微信网页版(用手机也可以),https://web.weixin.qq.com/
 
我向w3note这个公众号发了一个笑脸,然后它就自动回复,如图
微信公众平台开发入门教程
 
图中输出的"hello world!",就是前面代码中$contentStr变量的值。
 
再来一张
微信公众平台开发入门教程

 

在做微博登陆之前是需要申请到APP KEY 和App Secret ,这个的申请方式请去 open.weibo.com 申请相关内容。

在官网也有相关的开发文档http://open.weibo.com/wiki/可以查看相关资料。
我这里下载的php的SDK直接进行的web网站应用。
下载SDK,配置好config文件。

 

 代码如下 复制代码

<?php
header('Content-Type: text/html; charset=UTF-8');
 
define( "WB_AKEY" , 'xxxxxxxxxx' );
define( "WB_SKEY" , 'xxxxxxxxxxxxxxxxxxxxxxxxx' );
define( "WB_CALLBACK_URL" , 'http://xxxxxxxxxxxx/callback.php' );//回调地址
*这里的回调地址是指如果用户同意授权,页面跳转至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE     //YOUR_REGISTERED_REDIRECT_URI 就是你的回调地址。
那就第一步需要首先引导用户进行授权。


include_once( 'config.php' );
include_once( 'saetv2.ex.class.php' );
 
$o = new SaeTOAuth( WB_AKEY , WB_SKEY );
 
$code_url = $o->getAuthorizeURL( CANVAS_PAGE );
 
echo "<a href=$code_url>授权</a>";


//授权地址为:
 
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI</pre>

如果用户同意授权之后,在你的回调地址里需要获取 换取Access Token 来调用接口。获取信息,等等。。。

 代码如下 复制代码

if($_REQUEST['code']){
echo "sds";
$keys = array();
$keys['code'] = $_REQUEST['code'];
$keys['redirect_uri'] = CANVAS_PAGE;
$tt= new SaeTOAuth( WB_AKEY , WB_SKEY );
$bb = $tt->getAccessToken('code',$keys);
var_dump($bb);
}

在成功获取到AccessToken之后,可以调用saetv2.ex.class.php的一切封装好的函数进行操作,例如,我这里做登陆功能就需要获取用户的信息:

 代码如下 复制代码


/**
* 根据用户UID或昵称获取用户资料
*
* 按用户UID或昵称返回用户资料,同时也将返回用户的最新发布的微博。
* <br />对应API:users/show
*
* @access public
* @param mixed $uid_or_name 用户UID或微博昵称。
* @return array
*/
function show_user( $uid_or_name )
{
return $this->request_with_uid( 'https://api.t.sina.com.cn/users/show.json' , $uid_or_name );
}

虽然php 中的header()函数 下载文件不支持断点续传功能但有时我们还真需要此功能,如我们下载txt,图片文件时如果直接是个连接估计是直接打开了而不是下载了,那么我们可如何实现下载呢。
 代码如下 复制代码

<?php

/**
 * 文件下载
 *
**/

header("Content-type:text/html;charset=utf-8");

download('web/www.111cn.net .txt', 'txt文件下载');
 
function download($file, $down_name){

 $suffix = substr($file,strrpos($file,'.')); //获取文件后缀
 $down_name = $down_name.$suffix; //新文件名,就是下载后的名字

 //判断给定的文件存在与否
 if(!file_exists($file)){
  die("您要下载的文件已不存在,可能是被删除");
 }
 $fp = fopen($file,"r");
 $file_size = filesize($file);
 //下载文件需要用到的头
 header("Content-type: application/octet-stream");
 header("Accept-Ranges: bytes");
 header("Accept-Length:".$file_size);
 header("Content-Disposition: attachment; filename=".$down_name);
 $buffer = 1024;
 $file_count = 0;
 //向浏览器返回数据
 while(!feof($fp) && $file_count < $file_size){
  $file_con = fread($fp,$buffer);
  $file_count += $buffer;
  echo $file_con;
 }
 fclose($fp);
}

?>

需求是把之前网站的一个mssql2000的数据库转换成mysql数据库,并且新的网站采用不同的程序,因此还要把数据库中的数据根据字段的不同,和字段数据规则的不同进行转换。

1.不同数据库类型直接的数据库转换

navicat是个很好的数据库管理软件,可以用它进行不同类型数据库直接的转换,以下链接详细说明如何用navicat将mssql2000数据库转换成mysql数据库。

2.不同结构数据库之间的数据转换

不同数据库结构之间的数据转换存在几个问题,①字段不同,甚至无法一一对应 ②字段格式不同,要转换成目标数据库字段的设计格式 ③sql语句结合php程序转换

这是把之前一个downplus下载系统的数据库转换成phpcms的数据库。

直接上代码,有这方面需求的研究代码吧。

站点1 软件站

①导入所有软件到软件表v95_soft

 代码如下 复制代码
insert into v95_soft(id,catid,title,soft,soft_name,pinyin,thumb,keywords,size,start,inputtime,updatetime,auth,property)
select softid,softclassid,seotitle,appname,softname,softphoneticism,IcoImage,softkeywords,softsize,softscore,
unix_timestamp(SoftInsertDate),unix_timestamp(softcreatedate),softlicence,softproperty
from dp_softlist;

②写sql设status为99

 代码如下 复制代码
update v95_soft set status=99;

③到后台更新全站url。然后更新title为空的,软件名称

 代码如下 复制代码
update v95_soft set title=soft_name where title='';

④导入到v95_soft_date

 代码如下 复制代码
insert into v95_soft_data(id,content,language,website,icon,softos)
select softid,softintro,softlanguage,softauthorurl,IcoImage,softos
from dp_softlist;

⑤执行php转换程序,导入下载地址

http://www.xxx.com/admin.php?m=admin&c=index&a=down

 代码如下 复制代码
public function down(){
 set_time_limit(0);
 $sql = "select id from v95_soft_data ";
 $result = $this->db->query($sql);
 while ($r = mysql_fetch_assoc($result)) {
  //$softid = 11;
  $softid = $r['id'];
  $sql = "select fileurlname,fileurl,fileftpid from dp_softfiles where softid = $softid ";
  $downfile = $this->db->query($sql);
  $downfiles = array();
  while ($r = mysql_fetch_assoc($downfile)) {
   $isbigfile = 0;
   if (!$r['fileurlname']) {
    $sql = "select soft_name from v95_soft where id = $softid ";
    $result2 = $this->db->query($sql);
    while ($r2 = mysql_fetch_assoc($result2)) {
     $soft_name = $r2['soft_name'];
    }
    $r['fileurlname'] = $soft_name;
   }
   if(12 == $r['fileftpid']){
    $isbigfile = 1;
   }
   $downfiles[] = array('fileurl'=>$r['fileurl'],'filename'=>$r['fileurlname'],'isbigfile'=>$isbigfile);
  }
  $downfiles = array2string($downfiles);
  //var_dump($downfiles);exit;
  $sql = "update v95_soft_data set downfiles = '$downfiles' where id = $softid ";
  $this->db->query($sql);
 }
 echo 'OK';
}

⑥软件单位和大小转换

 代码如下 复制代码
update v95_soft set size=size/1000,unit='MB' where size>1000 and size<1000000;
update v95_soft set size=size/1000000,unit='GB' where size>1000000;

⑦导入标签,到v95_keyword和v95_keyword_data

 代码如下 复制代码
insert into v95_keyword(id,keyword) select tagid,tagname from dp_tag;
update v95_keyword set siteid=1;

⑧执行php转换程序,匹配标签到关键字

http:///admin.php?m=admin&c=index&a=transe

php代码:

 代码如下 复制代码
public function transe(){
 set_time_limit(0);
 $sql = "select tagid,softidlist from dp_tag";
 $result = $this->db->query($sql);
 while($r = mysql_fetch_assoc($result)){
  //var_dump($r);exit;
  $tags = $r['softidlist'];
  $tags = explode(",", $tags);
  $tags = array_filter($tags);
  //var_dump($tags);exit;
  $tagid = $r['tagid'];
  //echo $tagid;exit;
  foreach ($tags as $tag) {
   $sql="insert into v95_keyword_data(tagid,siteid,contentid) values('$tagid','1','$tag')";
   $this->db->query($sql);
  }
 }
 echo 'OK';
}

调整格式

 代码如下 复制代码
update v95_keyword_data set contentid=CONCAT(contentid,'-12');

⑩点击率

 代码如下 复制代码

insert into v95_hits(hitsid,catid) select id,catid from v95_soft;
//可以不用转,太慢了

update v95_hits as a left join dp_softlist as b on a.hitsid=b.softid
set a.weekviews=b.softweekhits,a.monthviews=b.softmonthhits,a.dayviews=b.softdayhits,a.views=b.softallhits;
 
update v95_hits set hitsid=concat('c-12-',hitsid);

十一 相关文章

 代码如下 复制代码

http:///admin.php?m=admin&c=index&a=related (最后执行,很慢)
php代码:

public function related(){
 set_time_limit(0);
 $sql = "select id,keywords from v95_soft";
 $result = $this->db->query($sql);
 while ($r = mysql_fetch_assoc($result)) {
  $softid = $r['id'];
  $keywords = $r['keywords'];
  $keywords = explode(",", $keywords);
  $related = '';
  foreach ($keywords as $keyword) {
   $sql = "select softidlist from dp_tag where tagname='$keyword' ";
   $result2 = $this->db->query($sql);
   while ($r2 = mysql_fetch_assoc($result2)) {
    $related = $related.','.$r2['softidlist'];
   }
  }
  $related = explode(",", $related);
  $related = array_filter($related);
  shuffle($related);
  $related = array_slice($related, 0,10);
  $related = implode("|", $related);
  $sql =  "update v95_soft_data set relation = '$related' where id = $softid ";
  $this->db->query($sql);
 }
 echo 'OK';
}

站点2 单机站

①由于类别不同,要先把原先类别改成现在的类别id

 代码如下 复制代码
update downtb set ClassID=217 where ClassID=1;
update downtb set ClassID=218 where ClassID=2;
update downtb set ClassID=219 where ClassID=3;
update downtb set ClassID=220 where ClassID=4;
update downtb set ClassID=221 where ClassID=5;
update downtb set ClassID=222 where ClassID=6;
update downtb set ClassID=223 where ClassID=7;
update downtb set ClassID=224 where ClassID=8;
update downtb set ClassID=225 where ClassID=9;
update downtb set ClassID=226 where ClassID=10;
update downtb set ClassID=233 where ClassID=11;

②导入主表到v95_danji

 代码如下 复制代码
insert into v95_danji(id,catid,title,thumb,soft_name,size,inputtime,updatetime,auth,language,downurl)
select DownID,ClassID,SeoTitle,thumb,DownName,Sizes,unix_timestamp(addtime),unix_timestamp(addtime),
Shouquan,Languages,DownIntro1 from downtb;

③后台更新全站url,然后设status为99,没有seo标题的采用单机游戏名称

 代码如下 复制代码
update v95_danji set status=99;
update v95_danji set title=soft_name where title='';

④大小单位转换,下载地址格式调整

 代码如下 复制代码
update v95_danji set size=size/1000,unit='MB' where size>1000 and size<1000000;
update v95_danji set size=size/1000000,unit='GB' where size>1000000;
update v95_danji set downurl=replace(downurl,'@@**@@本地下载','');

⑤修改下载地址
要判断单机游戏填写的地址
如果填写的

 代码如下 复制代码
game=z1.9553.com
game2=z2.9553.com

以此类推

/admin.php?m=admin&c=index&a=downurl(废弃)

⑥导入到v95_danji_data

 代码如下 复制代码
insert into v95_danji_data(id,content,gameid) select DownID,DownIntro,game_id from downtb;

⑦单机标签转换
1、新增单机站标签到v95_keyword表

 代码如下 复制代码
insert into v95_keyword(id,keyword) select TagID+31616,TagName from tagtb;
update v95_keyword set siteid=2 where siteid=0;

2、执行php程序
此时记住当前v95_keyword中siteid为1的最大id,更改php程序,再填入keywords,执行

http:///admin.php?m=admin&c=index&a=danji

php代码:

 代码如下 复制代码
public function danji(){
 set_time_limit(0);
 $sql = "select DownID,ToTagIDs from downtb";
 $result = $this->db->query($sql);
 while ($r = mysql_fetch_assoc($result)) {
  $id=$r['DownID'];
  $ToTagIDs = explode(",", $r['ToTagIDs']);
  $ToTagIDs = array_filter($ToTagIDs);
  foreach ($ToTagIDs as $key => $value) {
   $ToTagIDs[$key] = $value+31682;
  }
  //var_dump($ToTagIDs);exit;
  foreach ($ToTagIDs as $tagid) {
   $sql = "select keyword from v95_keyword where id=$tagid ";
   $keywords = $this->db->query($sql);
   while ($r = mysql_fetch_assoc($keywords)) {
    $keyword[] = $r['keyword'];
   }
 
  }
  $new_keyword = implode(",", $keyword);
  $sql="update v95_danji set keywords='$new_keyword' where id=$id";
  $this->db->query($sql);
  unset($keyword);
  unset($ToTagIDs);
 }
 echo 'OK';
}

3、执行php程序

http:///admin.php?m=admin&c=index&a=danji2

php代码:

 代码如下 复制代码
public function danji2(){
 set_time_limit(0);
 $sql = "select id,keywords from v95_danji";
 $result = $this->db->query($sql);
 while ($r = mysql_fetch_assoc($result)) {
  $contentid = $r['id'];
  $keywords = $r['keywords'];
  $tags = explode(",", $keywords);
  foreach ($tags as $tag) {
   $sql = "select id from v95_keyword where keyword='$tag' and siteid=2";
   $id = $this->db->query($sql);
   while ($r = mysql_fetch_assoc($id)) {
    $id = $r['id'];
    $sql = "insert into v95_keyword_data(tagid,siteid,contentid) values('$id',2,'$contentid')";
    $this->db->query($sql);
   }
  }
  unset($tags);
 }
 echo 'OK';
}

4、修改v95_keyword_data表siteid为2的contentid格式

 代码如下 复制代码
update v95_keyword_data set contentid=CONCAT(contentid,'-14') where siteid=2;

⑧使点击率可用

 代码如下 复制代码

insert into v95_hits(hitsid,catid) select CONCAT('c-14-',id),catid from v95_danji;

[!--infotagslink--]

相关文章

  • MyBatis-Plus自动填充功能失效导致的原因及解决

    这篇文章主要介绍了MyBatis-Plus自动填充功能失效导致的原因及解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • PHP swfupload图片上传的实例代码

    PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
  • C#实现延时并自动关闭MessageBox的方法

    这篇文章主要介绍了C#实现延时并自动关闭MessageBox的方法,非常实用的功能,需要的朋友可以参考下...2020-06-25
  • 百度编辑器ueditor修改图片上传默认路径

    本案例非通用,仅作笔记以备用 修改后的结果是 百度编辑器里上传的图片路径为/d/file/upload1...2014-07-03
  • Java实现将图片上传到webapp路径下 路径获取方式

    这篇文章主要介绍了Java实现将图片上传到webapp路径下 路径获取方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-11-12
  • SpringMvc自动装箱及GET请求参数原理解析

    这篇文章主要介绍了SpringMvc自动装箱及GET请求参数原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
  • 利用Redis如何实现自动补全功能

    这篇文章主要给大家介绍了关于如何利用Redis如何实现自动补全功能的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-04-17
  • php+js实现异步图片上传实例分享

    upload.php复制代码 代码如下:<?phpif(isset($_FILES["myfile"])){$ret = array();$uploadDir = 'images'.DIRECTORY_SEPARATOR.date("Ymd").DIRECTORY_SEPARATOR;$dir = dirname(__FILE__).DIRECTORY_SEPARATOR.$upl...2014-06-07
  • MySQL自动停机的问题处理实战记录

    这篇文章主要给大家介绍了关于MySQL自动停机的问题处理,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-01
  • python实现图片加文字水印OPenCV和PIL库

    本文来为大家介绍一下,使用python中的库实现给图片添加文字水印,openCV可以给图片添加水印,如果要添加汉字水印那就要使用PIL库...2021-09-26
  • ASP.NET百度Ueditor编辑器实现上传图片添加水印效果

    这篇文章主要给大家介绍了ASP.NET百度Ueditor编辑器1.4.3这个版本实现上传图片添加水印效果的相关资料,文中通过图文及示例代码介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。...2021-09-22
  • 利用Yii框架实现图片上传

    这篇文章主要介绍了Yii框架实现图片上传的方法,结合实例形式较为详细的分析了Yii框架实现图片上传功能的具体步骤与相关操作技巧,需要的朋友可以参考下 本文实例...2017-07-06
  • php文件上传(强大文件图片上传类)

    这款文件上传实用代码,可以方便的上传你指定的文件或图片,同时也可以快速的限制上传图片文件类或大小。 /* * created on 2010-6-21 * * the class for image...2016-11-25
  • Email URL的判断和自动转换函数

    <?php function validateEmail($email) { return eregi("^[_a-z0-9-] (.[_a-z0-9-] )*@[a-z0-9-] (.[a-z0-9-] )*(.[a-z]{2,3})$", $email); } function validat...2016-11-25
  • 类的自动加载

    当你尝试使用一个未定义的类时,PHP会报告一个致命错误. 解决方法就是添加一个类,可以用include包含一个文件. 究竟你知道要用到哪个类. 但是,PHP提供了类的自动加载功...2016-11-25
  • PHP:实现给上传图片加水印的程序代码

    用PHP给上传图片加水印的程序是通过判定文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring()或是原已经定好的图像程序当中判定水...2016-11-25
  • 实例:实现自动清除日期目录shell脚本

    这次文章给大家带来的是一个简单使用的实例:实现自动清除日期目录shell脚本,对脚本感兴趣的下面我们一起来看看那具体的清除日期方法。 实现自动清除日期目录shell...2017-07-06
  • php多文件上传 多图片上传程序代码

    多文件上传其实就包括了图片及各种文件了,下面介绍的是一款PHP多文件上传类,一共两个文件,upp.php 和 uploadFile.php,upp.php,这是前台所显示的表单文件了,默认的是四个...2016-11-25
  • php 图片上传代码(具有生成缩略图与增加水印功能)

    这款图片上传源代码是一款可以上传图片并且还具有给上传的图片生成缩略图与增加水印功能哦,可以说是一款完美的图片上传类哦。 代码如下 复制代码 ...2016-11-25
  • 关闭PayPal预付款,避免自动扣费的教程

    PayPal在国外就是支付宝一样强大了许多的平台都支持PayPal付款了,我信如果购买国外主机肯定会用到PayPal了,今天我们来给各位介绍关闭PayPal预付款,避免自动扣费吧,具体如...2016-10-10