我们不管是做博客系统还是其他网站,图片是免不了要使用到的。但是,我们都知道图片的访问是很耗资源的,同时也是很占磁盘空间的,且还特别占带宽。

所以,我们一般都会用到特定的图片服务器。不过,像我等屌丝平时闹着玩肯定是不会花钱整那些东西。今天我就来介绍一个高速免费无限量图片存储支持外链。是的,你没听错。就是无限量免费。它的名字:贴图库,可能有同学知道并且使用过了。那你可以略过了。

介绍完贴图库后,我在向大家介绍下。我的图话实现。图话是什么?就是我们经常看到的弹幕,只不过现在到了图片上面了。演示地址

贴图库

其实官网已经有比较详细的文档了:http://open.tietuku.com/doc

官网提供了php的sdk,以前记得也有java的,但是没见过有.net。没办法,只能自己写了。

其实这个我不想做过多的讲解了,等下我提供demo下载,对着官方文档自己就看得懂了。我直接讲下怎么使用。

第一步:导入 TietukeLib.dll 。

就是我自己写的一个类库。

第二步:在 Global.asax 中系统启动时设置 AccessKey和SecertKey ,可在http://open.tietuku.com/manager查看到。

protected void Application_Start()
{
TokenHelp.AccessKey = "";
TokenHelp.SecertKey = "";

第三步:在页面访问是后台获取TeKen,然后在页面的空间里面设置TeKen值。

后台(相册ID查看:http://open.tietuku.com/album)

 public static string TeKen_File = string.Empty;
public static string TeKen_WebUrl = string.Empty; public ActionResult Index()
{
TeKen_File = TietukeHelp.GetToken(相册ID, "file");//文件上传
TeKen_WebUrl = TietukeHelp.GetToken(相册ID, "web");//weburl上传
return View();
}

前台

<div style="margin: 5px; padding: 5px; border: 1px dashed #0094ff">
<form enctype="multipart/form-data" method="post" action="http://up.tietuku.com/">
<input name="Token" value="@(Hi.Web.Controllers.TieTuKuController.TeKen_File)" type="hidden">
<input type="file" name="file">
<input type="submit">
</form>
</div> <div style="margin:5px;padding:5px;border:1px dashed #0094ff">
<form method="post" action="http://up.tietuku.com/">
ImgUrl:<input name="Token" value="@(Hi.Web.Controllers.TieTuKuController.TeKen_WebUrl)" type="hidden">
<input type="text" name="fileurl">
<input type="submit">
</form>
</div>

效果图:

演示地址:http://hi.haojima.net/TieTuKu/Index

经过上面的介绍,如果您只是想在网页上简单的使用,并且不关系源码的话,了解了上面的就行了。直接下载TieTuKuLib.dll【注意:版本是.NET Framework4.5】。

如果您想在通过非网页的形式,也就是后台直接通过图片文件路径或网络图片地址进行上传的话,那就继续听我往下分析。

所说的后台传图片,其实就是用 System.Net.Http.dll 中的 HttpClient 来模拟get或者post请求。

这几个方法我也封装到了上面的TieTuKuLib.dll文件里面。直接TietukeLib.Help.PostReqest可以发送内容post请求,TietukeLib.Help.PostFileReqest发送图片和文字内容post请求。(当然,我的命名不规范。您可以拿到源码后自己修改下命名。我这里就懒得改了)

例:

/// <summary>
/// 根据url图片源 上传到指定相册id的相册
/// </summary>
/// <param name="url">url图片源</param>
/// <param name="c_aid">相册id(http://open.tietuku.com/album页面可以查看到)</param>
/// <returns></returns>
public static string PostUrlImg(string url, int c_aid)
{
var data = (TokenHelp.DateTimeToUnixTimestamp(DateTime.Now) + ).ToString();
var a_data = new { deadline = data, aid = c_aid, from = "web" };
StringBuilder str_content = new StringBuilder();
str_content.Append("Token=" + TokenHelp.GetToken(a_data));
str_content.Append("&fileurl=" + url);
return TietukeLib.Help.PostReqest("http://up.tietuku.com/", str_content.ToString());
}

例:

/// <summary>
/// 根据本地文件流 上传到指定相册id的相册
/// </summary>
/// <param name="c_aid">相册id</param>
/// <param name="imageStream">文件流</param>
/// <param name="imgName">文件名</param>
/// <returns></returns>
public static string PostImgData(int c_aid, FileStream fileStream, string imgName)
{ var data = (TokenHelp.DateTimeToUnixTimestamp(DateTime.Now) + ).ToString();
var a_data = new { deadline = data, aid = c_aid, from = "file" };
StringBuilder str_content = new StringBuilder();
str_content.Append(TokenHelp.GetToken(a_data));
return Help.PostFileReqest("http://up.tietuku.com/", fileStream, str_content.ToString(), imgName);
}

关于贴图库的介绍就到这里了。其实,你看懂了上面的,完全可以自己建一个免费的图片网站了,什么图片网?当然是MM图片网。,其实我自己就建了一个,只是尺度有点大,就不放出链接了。然后我的博客系统也打算用这个来存图片。

有了图片,我们还可以整点别的好玩的东西-->"图话",这就是接下来要分析的了。全部的源码下面再给出,和图话源码和一起。

图话

图话,说白了就是我们平时看视频上面飘来飘去的评论。现在我们只是把它飘到了图片上,就叫图话了。

当我看到图话的效果时,第一感觉就是好神奇哦,然后就是挺有意思的。然后就想自己拿来玩玩,结果找了下,没找到类似的插件。没办法,那就自己继续折腾折腾吧。

其实,仔细想想也挺简单的。飘来飘去,不就是一个div不断移动就可以了吗?是的,就是这么简单。我们很时候,都是被效果转移了注意力,而根本就没去想要去怎么实现它,或者以为会很难而懒得动手了。

好,我们说动就动。

先看效果图:

首先,你需要在图片上显示评论消息,那么必须要图片上层添加一个div作为容器,然后再去div上显示文字。

1、怎么在图片上添加一个层div?

position: absolute

“生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。”,我们暂且称为图话容器。

2、怎么样在“图话容器”中显示文字?

直接在“图话容器”里面添加div可以了,为了更好的控制在容器里面的位置和让其包裹文字,我们继续设置样式absolute。

3、怎样移动文字?

用js的定时器setInterval来不断改变文字所在div的位置left。

下面我们用代码说话。图片上层的div容器大小肯定要和图片大小一样。这里我们就需要动态读取加载的图片大小然后进行对应的设置。

图片加载时:

//图片加载时
function imgLoad(obj) {
var str_html = $(".mb").html();//取模版"图话容器"
var par = $(obj).parent();//取到img的父容器
par.prepend(str_html);//添加到img的上面
par.find(".div1").css("width", $(obj).css("width"));//设置容器的宽度和img一样
par.find(".div1").css("height", 100);
var strs = $(obj).attr("src").split('/');
var imgName = strs[strs.length - 1];
imgName = isc(imgName);
$(obj).attr("name", imgName);
msgKey[msgKey.length] = imgName;
msgData[imgName] = ["test1:弹一下吧1", "test2:弹一下吧2", "test3:弹一下吧3", ];
setInterval(function () {//定时器 不断执行
par.find(".div11").each(function () {//取到所有的 评论文字 所在div
mesgCycle(this, msgData[imgName]);
});
}, "10");
}

图话“容器模版”

<div class="mb" style="display:none">
<div class="div1" style="background-color: rgba(0,0,0,0.3); position: absolute;overflow:hidden;">
<div class="div11" style="top: 11px; left: 50px; font-size: 20px; color: rgba(0,0,0,0.3); position: absolute; overflow: hidden;">
test:测试1
</div>
<div class="div11" style="top: 28px; left: 90px; font-size: 20px; color: #ff6a00; position: absolute; overflow: hidden; "></div>
<div class="div11" style="top: 51px; left: 40px; font-size: 20px; color:#4cff00; position: absolute; overflow: hidden; ">test3:test3</div>
<div style="position:absolute;bottom:0px;width:100%">
<div class="but_div" style="display: table; margin: 0 auto">
<input type="text" class="inp" /><input type="button" onclick="but(this);" value="弹一个" />
</div>
</div>
</div>
</div>

定时执行移动坐标:

//接收 文字所在div  和 消息
function mesgCycle(element, mesg) {
var elementRight = parseInt($(element).css("left"));
var elementWidth = parseInt($(element).css("width"));
var imgWidth = parseInt($(element).parents(".div_pack").find("img").css("width"));
$(element).css("left", elementRight - 1);//移动一个单位坐标
if ((elementRight + elementWidth) == 0) {//如果完全容器
mesg[mesg.length] = mesg[0];
$(element).text(mesg.shift());//取下一条消息
$(element).css("left", imgWidth - parseInt($(element).css("width")));//重新设置初始坐标
$(element).css("color", getColor());//更好文字颜色
}
}

好了,关键代码就这些了。下面给出全部源码。

首先,我并非专业前端。肯定有很多用的不合适和不合理的(我只是瞎折腾),希望园友给出更好的解决方案。如果您觉得此文对您有那么一点点用,请轻轻点个赞。

演示地址:http://haojima.net/demo/tuhua

源码下载:http://pan.baidu.com/s/1qW3n3AG

(注意:demo里面要设置你自己的 相册ID、AccessKey 和 SecertKey )

本文链接:http://www.cnblogs.com/zhaopei/p/4931518.html

欢迎上海“程序猿/媛”、"攻城狮"入群:【沪猿】229082941 入群须知


ps:演示地址是高圆圆和范冰冰选美pk,事实证明,喜欢高圆圆的要多过范冰冰啊。赶快为你心仪的女神投上一票吧。

免费图片存储和图话【提供demo下载】的更多相关文章

  1. 可删除超炫&amp;多种特效的Card视图(改造自cardsui-for-android开源项目),提供DEMO下载

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990).谢谢支持!        实例Demo下载地址在本文最后 简介 这个Demo主要是使用了cardsui ...

  2. uploadify的用法与动态传参 提供demo下载

    ---恢复内容开始--- 官网:http://www.uploadify.com/   一款不错的上传插件.官方文档http://www.uploadify.com/documentation/ 用法 ...

  3. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...

  4. leaflet 结合 Echarts4 实现迁徙图(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  5. leaflet实现风场图(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  6. ETL利器Kettle实战应用解析系列二 【应用场景和实战DEMO下载】

    本文主要阅读目录如下: 1.应用场景 2.DEMO实战 3.DEMO下载 1.应用场景 这里简单概括一下几种具体的应用场景,按网络环境划分主要包括: 表视图模式:这种情况我们经常遇到,就是在同一网络环 ...

  7. 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)

    转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...

  8. 30分钟玩转Net MVC 基于WebUploader的大文件分片上传、断网续传、秒传(文末附带demo下载)

    现在的项目开发基本上都用到了上传文件功能,或图片,或文档,或视频.我们常用的常规上传已经能够满足当前要求了, 然而有时会出现如下问题: 文件过大(比如1G以上),超出服务端的请求大小限制: 请求时间过 ...

  9. KsUML 免费的类图建模工具

    最近基于SharpDevelop和NClass两个开源软件,开发了一个免费的类图建模工具,详情请访问 www.TimeGIS.com KsUML类图建模工具是一个用来给软件开发人员使用的一种UML类图 ...

随机推荐

  1. 浅谈redis和memcached的区别

    缓存技术方面说到redis大家必然会联想到memcached,了解它们的人应该都知道以下几点吧 redis与 memcached相比,redis支持key-value数据类型,同事支持list.set ...

  2. 温故知新--计算机网络 iso/osi七层模型 tcp/ip四层模型

    ISO七层模型由下至上为1至7层,分别为: 应用层(Application layer) 表示层(Presentation layer) 会话层(Session layer) 传输层(Transpor ...

  3. 基于ZooKeeper的分布式锁和队列

    在分布式系统中,往往需要一些分布式同步原语来做一些协同工作,上一篇文章介绍了Zookeeper的基本原理,本文介绍下基于Zookeeper的Lock和Queue的实现,主要代码都来自Zookeeper ...

  4. Jenkins配置自动发送邮件,成功!

    Jenkins自动发送邮件配置: 打开"系统管理"--"系统设置" 在"Jenkins Location"设置系统管理员地址(重要:不能省略 ...

  5. ng1.3+表单验证<AngularJs>

    前一篇文章说过,ng1.3+以后对于表单验证有了优化,它不再需要一个详细的表达式状态创建元素显示或隐藏. 例如:我们在ng1.3之前的版本都需要如下写法: <div class="er ...

  6. echarts之tooltip-position

    当postion为Array时 tooltip : { trigger: 'axis', position:[3,3] //赋予一个[x,y]的位置 } 当postion为function时 tool ...

  7. 动作手游实时PVP技术揭密(服务器篇)

    前言 我们的游戏是一款以忍者格斗为题材的ACT游戏,其主打的玩法是PVE推图及PVP 竞技.在剧情模式中,高度还原剧情再次使不少玩家泪目.而竞技场的乐趣,伴随着赛季和各种赛事相继而来,也深受玩家喜爱, ...

  8. python os.path模块

    os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix(list) #返回list(多个路径) ...

  9. Java jvisualvm简要说明

    jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析... jvisualvm已经被集成在jdk1.6以上的版本中(不是jre).自身运行需要最低jdk1.6版本, ...

  10. sort命令

    1.默认情况下,sort命令,以字母序进行文本排序sort word.txt2.如果想对数字进行排序,可以使用-n参数sort num.txt -n3指定列排序下面是对passwd文件,以冒号(:)进 ...