前言

前段时间看到一个国外的网站,在线生成ajax loading动画。觉得很实用,于是动起了移植到自己网站的念头(一直以来的习惯,看到好的工具总想着移植到本地好好研究)。根据以往移植的经验最终把 这个工具移植到自己网站上了,生成图片的核心还是用了原来网站的接口,所以这个功能的实现完全依赖于原网站,生成和下载图片的速度取决于网速,由于是国外 的网站,功能并不稳定。下面介绍下我移植的过程已经遇到的问题。

1.把原网站的代码本地化

这一步比较简单,不过有点麻烦,相关的图片,css,js,html文件保存在本地。

2.实现生成图片的功能

这里遇到了第一个问题,网站生成的图片保存在根据颜色值生成的途径上,而这些图片有防盗链设置,不 允许外来网站引用。尝试过写程序把网站上的所有图片按原目录下载到本地,但是图片太多,放弃了这个思路。

最后采取的办法是通过伪造来源访问原网站的图片,获取图片数据,并直接输出在页面。

下面是实现的代码

  1. $file=$_REQUEST['file'];
  2. $url = ’http://www.ajaxload.info/’.$file;
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, $url);
  5. curl_setopt ($ch, CURLOPT_HEADER,0);
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt ($ch, CURLOPT_REFERER, “http://www.ajaxload.info”);
  8. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  9. $chData = curl_exec($ch);
  10. if (curl_errno($ch)) {
  11. echo ’Curl error: ’ . curl_error($ch);
  12. }
  13. curl_close($ch);
  14. header(“Content-type:image/gif”);
  15. echo $chData;

注:本人的网站基于BAE建设,与其他服务器的伪造来源有些区别

其他服务器需把

  1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

替换成

  1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

把上述代码保存为ajaxload.php文件用下面的代码

  1. var url = ’http://bloglaotou.duapp.com/ajaxloader.php?file=cache/’+c1+’/'+c2+’/'+c3+’/'+c4+’/'+c5+’/'+c6+’/'+$$(‘type’).value+’-'+trans+’.gif’;

注:http://bloglaotou.duapp.com替换成你自己的ajaxloader.php文件的地址。

替换原网站script.js文件中的

  1. var url = ’cache/’+c1+’/'+c2+’/'+c3+’/'+c4+’/'+c5+’/'+c6+’/'+$(‘type’).value+’-'+trans+’.gif’;

3.下载图片的实现

同样的原因,原网站的下载功能移植到本地后也不能用了,实现的方法与生成图片的方法类似

代码如下

  1. if(isset($_GET[url])){
  2. $file=$_GET[url];//获取参数
  3. header(“Content-Type: application/force-download”);
  4. header(“Content-Disposition: attachment; filename=ajax-loading.gif”);//$downname是下载后的文件名
  5. $file=$_REQUEST['url'];
  6. $url = ’http://www.ajaxload.info/’.$file;
  7. $ch = curl_init();
  8. curl_setopt($ch, CURLOPT_URL, $url);
  9. curl_setopt ($ch, CURLOPT_HEADER,0);
  10. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  11. curl_setopt ($ch, CURLOPT_REFERER, “http://www.ajaxload.info”);
  12. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  13. $chData = curl_exec($ch);
  14. if (curl_errno($ch)) {
  15. echo ’Curl error: ’ . curl_error($ch);
  16. }
  17. curl_close($ch);
  18. echo $chData;
  19. exit;//结束程序
  20. }

把上面的代码保存为download.php并把原网站script.js文件中的

  1. if(!$(‘downloadit’)) domEl(‘a’,'Download it’,[['id','downloadit'],['href','download.php?img='+url]],$(‘previewinner’));

替换为

  1. if(!$(‘downloadit’)) domEl(‘a’,'下载’,[['id','downloadit'],['href','http://bloglaotou.duapp.com/download.php?url='+path]],$(‘previewinner’));

注:http://bloglaotou.duapp.com替换成你自己的ajaxloader.php文件的地址。

效果预览

查看示例

该功能已经集成到网站的小工具里,点这里查看

下载地址

Ajaxload动态加载动画生成工具的实现(ajaxload的本地移植)的更多相关文章

  1. java反射并不是什么高深技术,面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象

    java反射并不是什么高深技术,面向对象语言都有这个功能. 面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象,去获取类相关的信息 2.利用java反射可以调用类 ...

  2. Canvas——使用定时器模拟动态加载动画!

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. 运行时用AnimatorOverrideController动态加载动画片段

    https://blog.csdn.net/tlrainty/article/details/54602786 项目中经常会遇到这种情况:很多模型动画的AnimatorController是一模一样的 ...

  4. jQuery动态加载动画spin.js

    在线演示 本地下载

  5. WPF当属性值改变时利用PropertyChanged事件来加载动画

    在我们的程序中,有时我们需要当绑定到UI界面上的属性值发生变化从而引起数据更新的时候能够加载一些动画,从而使数据更新的效果更佳绚丽,在我们的程序中尽量将动画作为一种资源放在xaml中,而不是在后台中通 ...

  6. [UE4]C++实现动态加载UObject:StaticLoadObject();以Texture和Material为例

    相关内容: C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>() http://aigo.iteye.com/blog/2281558C++静 ...

  7. Aniamtion加载动画

    css新增样式Animation的运用 希望可以通过这个案例加深对Animation以及Transform 两大api的认识 效果图如下: 在这里需要注意的是:理应通过发送服务器请求来获取图片,从而达 ...

  8. 动态生成java、动态编译、动态加载

    我曾经见过一个“规则引擎”,是在应用系统web界面直接编写java代码,然后保存后,规则即生效,我一直很是奇怪,这是如何实现的呢?实际这就好像jsp,被中间件动态的编译成java文件,有被动态的编译成 ...

  9. 动态加载Dll时,通过Type生成类对象

    原文:动态加载Dll时,通过Type生成类对象 转:http://www.cnblogs.com/zfanlong1314/p/4197383.html "反射"其实就是利用程序集 ...

随机推荐

  1. HDU4831&&4832&&4834

    好久没打代码啦,今天lu一发百度之星,感觉还是学到不少东西的,写点收获. 第一题就是现在的HDU4831啦,题意很清楚,我一开始以为休息区也可以变为风景区,所以就不敢敲了,后来才得知数据里只会改风景区 ...

  2. LCIS 最长公共上升子序列

    这个博客好久没写了,这几天为了准备清华交叉研究院的夏令营,在复习大一大二ACM训练时的一些基础算法,正好碰到LICS,发现没有写在博客里,那就顺便记录一下好了. 参考链接:http://blog.cs ...

  3. solr的collection,shard,replica,core概念

    一.collection 1.由多个cores组成一个逻辑索引叫做一个collection.一个collection本质上是一个可以跨越多个核的索引,同时包含冗余索引. 2.collection由不同 ...

  4. POJ 3130 How I Mathematician Wonder What You Are!(半平面交求多边形的核)

    题目链接 题意 : 给你一个多边形,问你该多边形中是否存在一个点使得该点与该多边形任意一点的连线都在多边形之内. 思路 : 与3335一样,不过要注意方向变化一下. #include <stdi ...

  5. JavaScript基础(一)

    我是一个初学者,但求能学到些许知识!以下是根据韩顺平老师的<轻松搞定网页设计html+css+javascript—javascrip部分>整理而成. 为什么要学习javascript? ...

  6. MongoDB (四) MongoDB 数据模型

    在 MongoDB 中的数据有灵活的模式.在相同集合中文档并不需要有相同的一组字段或结构的公共字段的集合,文档可容纳不同类型的数据. MongoDB设计模式的一些考虑 可根据用户要求设计架构. 合并对 ...

  7. SpringMVC学习总结(七)——SpringMVC注解@..详解

    <context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有: @Controller 声明Action组件@Service    声明Service组件  ...

  8. MAC 如何设置文件夹权限为777

    1. cd 你的文件夹路径的上一级目录. 2. sudo chmod -R 777 你的文件夹名. 3. 输入密码. 4.成功

  9. ps小技巧

    一.加色与减色 电脑显示器和电视是加色法最常见的形式,而在油漆.颜料和彩色滤光片会用减色. 二.怎么把背景变成透明:其实就是抠图. 1.魔术棒+delete,缺点:应用于边界明显的图片,否则容差不好控 ...

  10. Crypto++编译使用

    简述 Crypto++库是一个用c++ 编写的密码类库,是一个自由软件.有关它的信息可以访问以下两个网站: Crypto++® Library Wiki-Crypto++® Library 简述 下载 ...