Adding Lightbox for Image Plugin in Tinymce

版权所有,转载请注明出处:http://guangboo.org/2013/05/11/adding-lightbox-image-plugin-tinymce

本博客的框架是django+grappeli+filebrowser,后台的在线编辑器是使用的tinymce,图片等资源的管理采用了django-filebrowser,这样就可以使用tinymce的nsert image插件插入图片,由于插入的仅仅是图片可能是处理过的,现在需要对博客中的所有图片添加ightbox功能,使可以查看原图。

django-filebrowser为django提供了文件管理的功能,并且对tinymce提供了接口,使得在tinymce的insert image界面中可以选择“Browser”,从而打开filebrowser的管理界面,使得可以选择要插入的图片。tinymce是一款在线编辑器,它提供了强大的插件功能,并且有完备的文档。lightbox是一款jquery的UI插件,使用户可以点击图片,查看图片的详细信息,如更大尺寸的图片,并且可以通过“prev”和"next",来查看页面中所有“lightbox”图片。

tinymce的insert image插件功能代码主要在文件:tiny_mce/themes/advanced/js/image.js中,界面文件是tiny_mce/themes/advanced/image.htm,我们要做到工作就是在tinymce将图片插入到html中时进行拦截,并修改img节点为<a><img .../></a>节点,因为这是lightbox的格式要求:

<a href="images/image-1.jpg" rel="lightbox[roadtrip]">image #1</a>
<a href="images/image-2.jpg" rel="lightbox[roadtrip]">image #2</a>
<a href="images/image-3.jpg" rel="lightbox[roadtrip]">image #3</a>

由于在使用filebrowser管理资源文件时,在上传的图片都会被保存多个版本:thumbnail, small, medium, big, large和原始文件,并且文件的命名也是以_thumbnail.xxx, _samll.xxx等的形式,如原始图片名为myimage-2012000.png,那么通过filebrowser上传的图片将保存myimage-2012000_thumbnail.png,myimage-2012000_small.png等处理后的文件,并且保存原文件。

在filebrowser的管理界面,提供了选择这些文件的接口,如下图,可以根据需要选择不同的图片尺寸显示,如选择select,就是选择原文件。

tinymce在插入图片时,是调用了image.js文件的ImageDialog.update方法。该方法的最后几段代码如下:

....
el = ed.selection.getNode();

if (el && el.nodeName == 'IMG') {
	ed.dom.setAttribs(el, args);
	tinyMCEPopup.editor.execCommand('mceRepaint');
	tinyMCEPopup.editor.focus();
} else {
	ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});
	ed.dom.setAttribs('__mce_tmp', args);
	ed.dom.setAttrib('__mce_tmp', 'id', '');

	ed.undoManager.add();
}

tinyMCEPopup.close();

我们将这段代码修改成:

....
el = ed.selection.getNode();

if (el && el.nodeName == 'IMG') {
	ed.dom.setAttribs(el, args);
	tinyMCEPopup.editor.execCommand('mceRepaint');
	tinyMCEPopup.editor.focus();
} else {
	if(f.lightbox.checked){
		ed.execCommand('mceInsertContent', false, '<a id="__mce_a_tmp" class="lightbox" rel="lightbox[plants]"><img id="__mce_tmp" /></a>', {skip_undo : 1});
		ed.dom.setAttribs('__mce_tmp', args);
		ed.dom.setAttrib('__mce_tmp', 'id', '');
		var href = args.src.replace('_thumbnail.', '.').replace('_small.', '.').replace('_medium.', '.').replace('_big.', '.').replace('_large.', '.');
				
		ed.dom.setAttribs('__mce_a_tmp', {'href':href});
		ed.dom.setAttrib('__mce_a_tmp', 'id', '');
	}else{
		ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});
		ed.dom.setAttribs('__mce_tmp', args);
		ed.dom.setAttrib('__mce_tmp', 'id', '');
	}

	ed.undoManager.add();
}

tinyMCEPopup.close();

这里的f.lightbox.checked是image.htm文件中添加了一个checkbox,如下图:

这样就可以使得插入的图片的html代码从<img ..../>变成lightbox要求的<a href="" rel="lightbox[plants]"><img .../></a>了。另外在图片显示的页面,如本博客的post detial页面,还需要添加lightbox的js和css,可以从http://lokeshdhakar.com/projects/lightbox2/下载,当前最新版本为2.51,要求的文件有:

<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
<script src="js/jquery-1.7.2.min.js"></script>
<script src="js/jquery-ui-1.8.18.custom.min.js"></script>
<script src="js/lightbox.js"></script>

现在可以点击上面的图片查看效果。

另外需要注意的是,在lightbox.js和lightbox.css文件中涉及到prev,next,loading等图片,因此在使用时需要修改这些图片的路径。

<think>好的,我现在需要解决用户在FFmpeg编译或链接过程中遇到的“error adding symbols: file in wrong format”错误。首先,我得理解这个错误的常见原因。用户提到他们参考的引用内容似乎有问题,因为引用[1]里的内容是关于MPEG2解码器和硬件加速的,可能和当前的问题无关,这可能是个引用错误,用户可能误用了参考资料,需要提醒他们检查引用来源。 接下来,分析错误本身。“file in wrong format”通常意味着链接器在尝试将不同架构或格式的目标文件合并时出现问题。比如,混合使用了32位和64位的库文件,或者交叉编译时目标平台不匹配。另外,静态库和动态库混用也可能导致这类问题。 然后,我需要考虑用户可能的操作场景。他们可能在编译FFmpeg时手动链接了某些库,或者在添加自定义库时出现了问题。例如,用户可能使用了错误的库路径,或者库文件本身损坏或不兼容。此外,编译选项中的-m参数(架构指定)是否正确也可能影响。 解决方案的第一步应该是检查库文件的架构是否一致。用户可以使用`file`命令查看目标文件和库文件的格式,确认它们都是相同的架构,比如都是x86-64或者ARM。第二步是验证库的完整性,确保没有损坏或部分编译的库文件。第三步是检查编译器和链接器的选项,特别是CFLAGS和LDFLAGS中的架构参数是否正确,比如是否有错误的-m32或-m64选项。第四步是确保静态库和动态库的使用正确,避免混合使用导致冲突。最后,如果用户进行了交叉编译,需要确认所有依赖库都是为目标平台正确编译的。 另外,用户可能需要检查FFmpeg的配置命令是否正确,是否指定了正确的工具链和路径。例如,在交叉编译时,可能需要设置--arch、--target-os等参数。如果用户手动添加了外部库,比如通过--extra-libs或--extra-ldflags,这些路径和库名是否正确也需要验证。 最后,需要提醒用户检查他们的引用来源是否正确,引用[1]中的内容似乎与当前问题无关,可能需要他们重新确认参考资料的有效性,避免误导解决方案。</think>[用户可见层] ### FFmpeg文件格式错误解决方案 出现`error adding symbols: file in wrong format`错误通常由以下原因导致: 1. **架构不匹配** - 检查目标文件与库文件的架构是否一致(如x86_64/ARM/32位/64位) - 验证命令: ```bash file libavcodec.a # 查看库文件架构 file your_object.o # 查看目标文件架构 ``` - 若出现`ELF 32-bit`与`ELF 64-bit`混用需统一架构[^2] 2. **库文件损坏** - 重新生成库文件: ```bash make clean && make ``` 3. **编译选项冲突** - 检查CFLAGS/LDFLAGS中是否混用`-m32`和`-m64` - 示例正确配置: ```bash ./configure --arch=x86_64 --extra-cflags="-m64" --extra-ldflags="-m64" ``` 4. **静态库/动态库混合** - 避免同时链接`.a`静态库和`.so`动态库 - 推荐统一使用静态库: ```bash ./configure --enable-static --disable-shared ``` 5. **交叉编译配置错误** - 确认交叉编译工具链完整: ```bash --cross-prefix=arm-linux-gnueabihf- --target-os=linux ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值