`
renzhen
  • 浏览: 247795 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

给自己的Web站点嵌入一个免费的图片编辑器

阅读更多
       随着open api运动的流行和深入,很多原本需要自己开发的功能都可以通过调用他人的接口来实现,比如:通过google、baidu实现站内搜索,使用bshare加入SNS功能等等。现在就连Web图片编辑器也可以通过调用他人的接口来实现了。
       Aviary发布可嵌入式HTML5图片编辑器,名为“羽毛(Feather)”,这个图片编辑器和美图秀秀等最大的不同在于它不是一个独立的应用,而是通过一个JS接口,将图片编辑器加载到你Web的Web系统中。甚至没有离开你的页面,最主要的是这个服务是完全免费的。心动了吗?心动不如马上行动,http://www.aviary.com/web上有系统的完整介绍和文档,还有一个code generator(代码生成),所以不作详细的说明了,下面我来说说一些实用的技巧。
       1.通过language参数让编辑器支持中文
       默认显示的编辑器显示的是英语,如果要显示中文,可以在参数中加入language:zh_HANS  (简体中文) 或 language:zh_HANT (繁体中文),详细的语言列表可以参看:http://www.aviary.com/web-documentation#constructor-config-language

       2.通过iframe调用图片编辑器,实现异步按需加载
       这样做的原因是:首先aviary服务的js加载有时候很慢,尤其在国内,直接在系统中调用可能会减慢Web系统本身的加载速度,而且在用户没有使用编辑器时就加载本身也是浪费了资源。
       解决方法是,为图片编辑器单独写一个html,Web系统通过jquery dialog或thickbox等对话框中用iframe嵌入这个图片编辑器html,,当然你也可以实现一个简单的对话框功能,我就是这么做的,通过js和iframe通信实现图片编辑器功能。
       要做这个其中有一点就是隐藏原生的图片编辑器的关闭按钮,可以通过加入参数noCloseButton:true 来实现。

       根据上面的描述,我将自己封装的简单的图片编辑器代码开放出来,仅供参考。
       iframe嵌入的图片编辑器代码
      
  <!DOCTYPE html>
<html>
<head>  
    <meta http-equiv="X-UA-Compatible" value="IE=9" />
     <script type="text/javascript" src="http://feather.aviary.com/js/feather.js"></script>
     <script type="text/javascript" src="script/jquery-1.6.4.js"></script>
    <!-- Instantiate Feather -->
    <script type="text/javascript">
        var featherEditor = new Aviary.Feather({
            apiKey: '',
            apiVersion: 2,
            tools: ['crop', 'resize', 'orientation', 'text', 'draw', 'contrast', 'brightness', 'saturation', 'sharpness', 'enhance', 'effects', 'redeye', 'whiten', 'blemish', 'stickers'],
            appendTo: 'injection_site',
           language : DIALOG.lang,
		  noCloseButton:true,
            maxSize : 2000,
            onSave: function(imageID, newURL){
                var jsonObj =DIALOG.jsonObj;
                DIALOG.setLoading(true);
								
                $.post(parent.parseToURL('pic','download'),{"file_url": encodeURIComponent(newURL)},function(json){
				var response = $.parseJSON(json);
				if (response.result == "OK") {
					jsonObj.callback(response.fname,response.width,response.height);
				}
				DIALOG.close();
			}).error(function(){
				DIALOG.close();
			});
                
            }
        });
        
        function initialize(){
             var jsonObj =DIALOG.jsonObj;
//               var url="http://www.baidu.com/img/baidu_sylogo1.gif";
			var url=jsonObj.url;
			$("#image").load(function(){
                    setTimeout(function(){
					featherEditor.launch({
							image : 'image',
							url : url
					});	
					DIALOG.setLoading(false);
				},1000);
				
                }).attr('src', url);
            
        }
        
    </script>
</head>
<body>
<img id="image" src="" style='display:none;' />
<div id="injection_site"></div>
<style type='text/css'>
    
    body, body.application{overflow:hidden; }
    #avpw_controls{
        -webkit-border-radius:8px;
         -khtml-border-radius:8px;
           -moz-border-radius:8px;
            -ms-border-radius:8px;
             -o-border-radius:8px;
                border-radius:8px;
    }  
</style>
</body>
</html>     
       


     自己写的一个简单的对话框,包含js和css两部分
    js部分:
   
function wp_editPicOnlineActual(param)
{
	var jsonObj = param || {};

	var DIALOG={};
	DIALOG.jsonObj=jsonObj;
	DIALOG.lang='zh_HANS';
	
	var dialog='<div id="sys_dialog_aviary" class="application dialog" style="height: 428px; top: 27px; left: 45px;opacity: 1; display: block; z-index: 3000; "><div class="close" style="display: block; "><span>x</span></div><table cellpadding="0" cellspacing="0" class="outer_wrap_table"><tbody><tr><td colspan="3"><div class="space"></div></td></tr><tr><td><div class="space"></div></td><td style="width:100%;height:100%;"><table cellpadding="0" cellspacing="0" class="wrap_table" style="display: table; "><tbody><tr><td class="wrap_td"><div class="loading"><table cellpadding="0" cellspacing="0"><tbody><tr><td><span>loading...</span></td></tr></tbody></table></div><iframe id="sys_dialog_iframe_aviary" frameborder="0" style="display: block; " src="'+relativeToAbsoluteURL('aviary_dialog.php')+'"></iframe></td></tr></tbody></table></td><td><div class="space"></div></td></tr><tr><td colspan="3"><div class="space"></div></td></tr></tbody></table></div>';
	$(dialog).appendTo('body');
	var ols = '<div id="wp-dialog_aviary" style="z-index:2999;"></div>';
	$(ols).appendTo('body');
	
	function dialog_pos(){
		var dialog=$('#sys_dialog_aviary');
		dialog.width($(window).width()-90).css('left','45px');
		$('#wp-dialog_aviary').width($(window).width()).height($(window).height());
		var topval=($(window).height()-dialog.height())/2;
		if(topval<0) topval=0;
		dialog.css('top',topval);
		if($.browser.msie){
			var height=dialog.height()-30;
			if($.browser.version < 9) $('#sys_dialog_aviary .close').addClass('ie_close');
			$('#sys_dialog_aviary .outer_wrap_table').css('height',height);
		}
	}
	dialog_pos();
	$(window).bind('resize.aviary',function(){
		dialog_pos();
	})
	
	DIALOG.close=function(){
		$('#sys_dialog_aviary').remove();
		$('#wp-dialog_aviary').remove();
		$(window).unbind('.aviary');
	}
	
	DIALOG.setLoading=function(isexist){
		if(isexist){
		    	$('#sys_dialog_aviary .loading').show();
		}else{
		     $('#sys_dialog_aviary .loading').hide();
		}
	}
	var iframewindow=$('#sys_dialog_iframe_aviary')[0].contentWindow;
	iframewindow.DIALOG=DIALOG;
	$(iframewindow).bind('load',function(){
		iframewindow.initialize();
	})
	$('#sys_dialog_aviary .close').click(function(){
		DIALOG.close();
	})

}
    


    对话框的css部分如下:
   
div#sys_dialog_aviary {-webkit-border-radius: 8px;-khtml-border-radius: 8px;-moz-border-radius: 8px;-ms-border-radius: 8px;-o-border-radius: 8px;border-radius: 8px;background: white;-webkit-box-shadow: 1px 1px 15px #333;-khtml-box-shadow: 1px 1px 15px #333;-moz-box-shadow: 1px 1px 15px #333;-ms-box-shadow: 1px 1px 15px #333;-o-box-shadow: 1px 1px 15px #333;box-shadow: 1px 1px 15px #333;position: absolute;top: 0;left: 0;}
div#sys_dialog_aviary td.wrap_td {height: 100%;}
div#sys_dialog_aviary div.loading table td {vertical-align: center;text-align: center;}
div#sys_dialog_aviary iframe {border: none;width: 100%;height: 100%;display: block;}
div#sys_dialog_aviary table.wrap_table {width: 100%;height: 100%;}
div#sys_dialog_aviary  div.loading table {width: 100%;height: 100%;}
div#sys_dialog_aviary table.outer_wrap_table {width: 100%;height: 100%;}
div#sys_dialog_aviary div.loading {background: white;-webkit-border-radius: 60px;-khtml-border-radius: 60px;-moz-border-radius: 60px;-ms-border-radius: 60px;-o-border-radius: 60px;border-radius: 60px;position: absolute;width: 100%;height: 100%;left: 0;top: 0;}
div#sys_dialog_aviary div.loading span {background: url(../images/loading.gif) top left no-repeat;padding: 6px 0 15px 41px;display: inline-block;margin: auto auto;font-size: 12px;color: #888;}
#wp-dialog_aviary {background-color:#000;left:0px;top:0px;filter:alpha(opacity=25);-moz-opacity:0.25;opacity:0.25;position:fixed;}
div#sys_dialog_aviary div.space {width: 15px;height: 15px;font-size: 0;}
div#sys_dialog_aviary div.close {
-webkit-box-shadow: 1px 1px 5px #111;
-khtml-box-shadow: 1px 1px 5px #111;
-moz-box-shadow: 1px 1px 5px #111;
-ms-box-shadow: 1px 1px 5px #111;
-o-box-shadow: 1px 1px 5px #111;
box-shadow: 1px 1px 5px #111;
-webkit-border-radius: 50px;
-khtml-border-radius: 50px;
-moz-border-radius: 50px;
-ms-border-radius: 50px;
-o-border-radius: 50px;
border-radius: 50px;
position: absolute;
top: -15px;
right: -15px;
width: 26px;
height: 26px;
color: white;
border: 3px solid white;
background: #111;
z-index: 999;
cursor: pointer;
line-height: 0;
}

div#sys_dialog_aviary div.ie_close{
	top: -23px;	 
	right: -23px	;
	width: 42px ;
	height: 42px;
	border: none;	
	background: transparent url(../images/aviary_close.png) top left no-repeat;	
}

div#sys_dialog_aviary div.close span {
font-family: Verdana,Arial,Helvetica,sans-serif;
padding: 11px 0 0 0;
text-align: center;
font-weight: bold;
line-height: 0;
font-size: 14px;
display: block;
}
div#sys_dialog_aviary div.ie_close span {display: none;}
    
分享到:
评论
2 楼 aqyzcs 2015-08-23  
你好,我想问一下,这个羽毛(Feather)图片编辑器里面自带的图案能够修改吗~
1 楼 su_yongzhen 2013-10-28  
你好,js代码里面的relativeToAbsoluteURL这个方法实现可以贴出来看看吗?谢谢

相关推荐

    开源:VB编写的桌面级WEB服务器

    这是一款桌面级的WEB服务器 包含一个静态的http服务器与一个js脚本引擎 可以展示静态的网页与生成简单的动态页面 适合个人在windows服务器上面简单的建立http服务 支持情况: 静态http session application(仅仅...

    Maven权威指南 很精典的学习教程,比ANT更好用

    一个简单的Web应用 5.1. 介绍 5.1.1. 下载本章样例 5.2. 定义这个简单的Web应用 5.3. 创建这个简单的Web应用 5.4. 配置Jetty插件 5.5. 添加一个简单的Servlet 5.6. 添加J2EE依赖 5.7. 小结 6. 一个多...

    AOLserver4.5源码+Windows下可执行程序+tcl8.5.7+HTTP Cookie Library

    大约在 1994 年时,在美国加州的圣芭芭拉市,两位 Unix 的高手,Jim Davidson 及 Doug McKee, 设计了一个 Web 出版系统,其中一部分是一个所见即所得的网页编辑程序,叫做 NaviPress。而他们所成立的 NaviSoft 公司...

    chrome.exe

    Google Chrome,又称谷歌浏览器,是一个由Google(谷歌)公司开发的免费网页浏览器。“Chrome”是化学元素“铬”的英文名称;过去也用Chrome称呼浏览器的外框。本软件的程式码是基于其他开放源代码软件所撰写,包括...

    Python Cookbook

    15.6 给一个XML-RPC服务提供一个wxPython GUI 544 15.7 使用Twisted的Perspective Broker 546 15.8 实现一个CORBA服务和客户 549 15.9 使用telnetlib执行远程登录 551 15.10 使用SSH执行远程登录 554 15.11 ...

    第三代移动WEB内核小程序风口-逐浪CMS2 x3.9.3全面发布

    ■扩展:优化了AJAX单文件上传组件,支持一个页面放置多个上传组件 ■增加:BIS模块 ■扩展:LED设计模块,支持动画等效果 ■修改:Boot4标签解析,增加font字体,基于逐浪字库的高端字体图标技术。 ■增加:Bis增加订单...

    ASP.NET4高级程序设计(第4版) 3/3

    2.3 代码编辑器 32 2.3.1 添加程序集引用 33 2.3.2 智能感知和大纲显示 35 2.3.3 Visual Studio 2010改进 37 2.4 编码模型 42 2.4.1 代码隐藏文件如何与页面连接 44 2.4.2 控件标签如何与页面变量连接 ...

    asp.net知识库

    鼠标放在一个连接上,会显示图片(类似tooltip) 使用microsoft.web.ui.webcontrols的TabStrip与IFame组件,达到页的切换效果 HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署...

    php-5.4.5-Win32-VC9-x86

    3.应该不是php,是pdf,你把后缀改一下,php文件是网页格式,用文本编辑器打开,但是本站提供的大部分是pdf格式的,安装一个pdf阅读器就能正常打开了. 4.“把扩展名改成 html ,然后用IE打开。” 5.如果安装了...

    SchemeScript:Eclipse的Scheme Editor插件

    SchemeScript嵌入了Kawa和SISC解释器,可以方便地用于连接基于SISCweb的Web应用程序的SISC REPL。 最新的稳定版本是1.3.0.rc1。 安装 要安装插件: 单击Help &gt; Install New Software... 单击Add...然后输入插件...

    最好的asp CMS系统科讯CMSV7.0全功能SQL商业版,KesionCMS V7.0最新商业全能版-免费下载

    34、两种编辑器选择,可视化编辑器,类似word的所件即所得的在线内容编辑功能,支持表格、图片、FLASH、多种格式播放器插入,支持图片和附件上传。 35、字符过滤,自动过滤敏感字符,避免损害网站形象、避免网站...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    2.3 代码编辑器 2.3.1 添加程序集引用 2.3.2 智能感知和大纲显示 2.3.3 Visual Studio 2010改进 2.4 编码模型 2.4.1 代码隐藏文件如何与页面连接 2.4.2 控件标签如何与页面变量连接 2.4.3 事件如何与...

    dreamweaver网站PHP开发MXP插件

    80多个国家的一个下拉菜单.mxp addToFavoritesBH.mxp Adv HTML Edit.mxp Allaire为ColdFusion开发的插件.mxp ASP生成HTML 1.2.0修正版.mxp ASP生成HTML插件.mxp ASP图片随机显示插件.mxp ASP无组件文件上传插件2.0...

    .htaccess

    The best thing to do if you are unsure is to either upload your own .htaccess file and see if it works or e-mail your web host and ask them. 判断你的主机是否允许.htaccess,一个标志很好的是它是否...

    test-site-sanity:测试站点

    你有什么本入门文章涵盖的概念是: 如何使用Studio的页面构建器来创建登录页面,并将其显示在Web前端中编辑具有并行网络预览的博客文章,可以将其配置为以便在生产中进行实时预览,而不仅限于本地开发如何管理SEO元...

    《程序天下:JavaScript实例自学手册》光盘源码

    6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9 类IE下拉框 6.10 下拉框式邮件发送 6.11 获取多选框的选择项 6.12 手动调整的列表框 6.13 ...

    程序天下:JavaScript实例自学手册

    6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9 类IE下拉框 6.10 下拉框式邮件发送 6.11 获取多选框的选择项 6.12 手动调整的列表框 6.13 ...

    Eclipse权威开发指南3.pdf

    2.1.3 Eclipse的外观:编辑器、视图和透视图..... 16 2.1.4 用户界面概述..... 18 2.1.5 首选项介绍..... 19 2.2 基本的Eclipse使用...... 20 2.2.1 在Eclipse中工作..... 21 2.2.2 了解Eclipse用户界面...

Global site tag (gtag.js) - Google Analytics