帝国CMS 整合在线图片裁剪插件croppic实现标题图片、文章封面裁剪功能
微wx笑
2020-05-07【帝国CMS】
6
0关键字:
标题图片、文章封面实现了选择文章内容中的图片功能,但是通常文章中的图片都比较大,不做裁剪的话直接拿来做缩略图会导致列表页面加载速度变慢,所以整合了在线图片裁剪插件crop
标题图片、文章封面实现了选择文章内容中的图片功能,但是通常文章中的图片都比较大,不做裁剪的话直接拿来做缩略图会导致列表页面加载速度变慢,所以整合了在线图片裁剪插件croppic实现标题图片、文章封面裁剪的功能。
效果如下:

实现上要在“选择文章内容中的图片功能”的基础上,添加代码。
1、进入后台管理系统-》系统》数据表与系统模型》管理数据表,根据你使用的数据表,选择对应的管理字段

2、找到标题图片字段,点击修改系统字段

3、在“输入表单替换html代码”输入框中替换为以下代码:
<?php
$ts = '';
if ($_GET["dbg"] == "1"){
$ts = "?ts=".time();
}
?><input name="titlepic" type="text" id="titlepic" value="<?=$ecmsfirstpost==1?"":ehtmlspecialchars(stripSlashes($r[titlepic]))?>" size="45">
<a onclick="window.open('ecmseditor/FileMain.php?type=1&classid=<?=$classid?>&infoid=<?=$id?>&filepass=<?=$filepass?>&sinfo=1&doing=1&field=titlepic<?=$ecms_hashur[ehref]?>','','width=700,height=550,scrollbars=yes');" title="选择已上传的图片">
<img src="../data/images/changeimg.gif" border="0" align="absbottom"></a><script src="/e/extend/croppic/titlepic.js<?=$ts?>"></script>
<link href="/e/extend/croppic/titlepic.css<?=$ts?>" rel="stylesheet"><script type="text/javascript" charset="utf-8" src="/e/extend/croppic/jquery.mousewheel.min.js">
</script><script type="text/javascript" charset="utf-8" src="/e/extend/croppic/croppic.js<?=$ts?>"></script><link href="/e/extend/croppic/croppic.css<?=$ts?>" rel="stylesheet">
<a onclick="selectTitlepic(this);" title="选择文章内容中的图片" href="javascript:void(0);"><img src="../data/images/select.png" border="0" align="absbottom">选择文章内容中的图片</a>
<a onclick="uploadTitlepic(this);" title="上传一张图片" href="javascript:void(0);"><img src="../data/images/upload.png" border="0" align="absbottom">上传一张图片</a>
<img src="../data/images/help.png" border="0" align="absbottom" title="上传的图片需要裁剪,因为上传之后保存在临时目录中">
<div id="divTitlepicCtnr"></div>
<div id="divTitlepicCutBox"></div>为了查看方便这里做了格式化,加了换行,实际使用时如果有换行的话可能导致显示的内容出现换行,不在一行上显示。
4、添加 titlepic.css 样式文件
#divTitlepicCtnr {
width: 80%; height: 150px; overflow: scroll; border: 2px solid #4FB4DE; padding: 5px; border-radius: 5px; display:none; position: absolute; background-color: #f6f6f6;
}
#divTitlepicCtnr img {
border: 1px solid #aaa;
width:220px;
max-height:160px;
margin: 5px;
cursor: pointer;
}
#divTitlepicCutBox {
width: 200px; height: 115px; overflow: visible; border: 2px solid #4FB4DE; padding: 0px; display:none; position: absolute; z-index:8; background-color: #f6f6f6;
}5、添加 titlepic.js 脚本文件,实现“selectTitlepic”方法,以及截图功能
//selectTitlepic
function selectTitlepic(img){
var div = document.getElementById("divTitlepicCutBox");
if (div){
div.style.display = "none";
}
var me = UE.getEditor('newstext');
var catcherLocalDomain = me.getOpt('catcherLocalDomain'),
catcherActionUrl = me.getActionUrl(me.getOpt('catcherActionName')),
catcherUrlPrefix = me.getOpt('catcherUrlPrefix'),
catcherFieldName = me.getOpt('catcherFieldName');
var remoteImages = [],
imgs = me.document.getElementsByTagName("img"),
test = function (src, urls) {
if (src.indexOf(location.host) != -1 || /(^\.)|(^\/)/.test(src)) {
return true;
}
if (urls) {
for (var j = 0, url; url = urls[j++];) {
if (src.indexOf(url) !== -1) {
return true;
}
}
}
return false;
};
for (var i = 0, ci; ci = imgs[i++];) {
if (ci.getAttribute("word_img")) {
continue;
}
var src = ci.getAttribute("_src") || ci.src || "";
if (!/^(https?|ftp):/i.test(src) && test(src, catcherLocalDomain)) {
remoteImages.push(src);
}
}
if (remoteImages.length) {
var div = document.getElementById("divTitlepicCtnr");
if (div == null){
div = document.createElement("div");
div.id = "divTitlepicCtnr";
img.append(div);
}else{
div.innerHTML = "";
}
for (var i = 0, ci; ci = remoteImages[i++];) {
var image = document.createElement("img");
image.src = ci;
image.setAttribute("data-src", ci);
//image.onclick = inputTitlepic;
image.addEventListener("click",inputTitlepic);
div.append(image);
}
div.style.display = "block";
}
}
function getSafeBase64(str){
var b64str = Base64.encode(str);
//把斜杠“/”替换为减号“-”,加号“+”无需替换
return b64str.replace(/\//ig, "-").replace(/\+/ig, "_");
}
function getTitle(len){
var title = $("#title").val();
var text=title.replace(/[^\x00-\xff]/g,"aa");
if (len < 1 || text.length <= len){
return getSafeBase64(title);
}
var tmpstr = "";
var lenstr = 0;
var halflen = (len - len % 2) / 2;
for (var i = 0; i < title.length; i++){
var c = title.charCodeAt(i);
tmpstr += title.charAt(i);
//单字节加1
if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) {
lenstr++;
}
else {
lenstr+=2;
}
if (lenstr >= halflen + len % 2){
break;
}
}
if (lenstr >= len){
return getSafeBase64(tmpstr);
}
halflen = len - lenstr;
lenstr = 0;
var tmpstr2 = "";
for (var i = title.length - 1; i > -1; i--){
var c = title.charCodeAt(i);
tmpstr2 = title.charAt(i) + tmpstr2;
//单字节加1
if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) {
lenstr++;
}
else {
lenstr+=2;
}
if (lenstr >= halflen){
break;
}
}
return getSafeBase64(tmpstr + tmpstr2);
}
function inputTitlepic(evt){
var ipt = document.getElementById("titlepic");
if (ipt && evt){
ipt.value = evt.srcElement.getAttribute("src");
}
var div = document.getElementById("divTitlepicCtnr");
if (div){
div.style.display = "none";
}
div = document.getElementById("divTitlepicCutBox");
if (div){
div.style.display = "block";
var croppicContainerPreloadOptions = {
//uploadUrl:'/e/extend/croppic/img_save_to_file.php',
cropUrl:'/e/extend/croppic/img_crop_to_file.php',
cropData:{
"title":getTitle(30)
},
loadPicture:ipt.value,
enableMousescroll:true,
doubleZoomControls:false,
imgEyecandy:true,
imgEyecandyOpacity:0.5,
smallControls:true,
loaderHtml:'<div class="loader bubblingG"><span id="bubblingG_1"></span><span id="bubblingG_2"></span><span id="bubblingG_3"></span></div> ',
onBeforeImgUpload: function(){ console.log('onBeforeImgUpload') },
onAfterImgUpload: function(){ console.log('onAfterImgUpload') },
onImgDrag: function(){ console.log('onImgDrag') },
onImgZoom: function(){ console.log('onImgZoom') },
onBeforeImgCrop: function(){ console.log('onBeforeImgCrop') },
onAfterImgCrop:function(rep){
var ipt = document.getElementById("titlepic");
if (ipt){
ipt.value = rep.url;
}
},
onReset:function(){ $("#divTitlepicCutBox").hide(); this.destroy();},
onError:function(errormessage){ console.log('onError:'+errormessage) }
}
var cropContainerPreload = new Croppic('divTitlepicCutBox', croppicContainerPreloadOptions);
}
}
function uploadTitlepic(){
var div = document.getElementById("divTitlepicCtnr");
if (div){
div.style.display = "none";
}
div = document.getElementById("divTitlepicCutBox");
if (div){
div.style.display = "block";
var croppicContainerPreloadOptions = {
uploadUrl:'/e/extend/croppic/img_save_to_file.php',
cropUrl:'/e/extend/croppic/img_crop_to_file.php',
cropData:{
"title":getTitle(30)
},
//loadPicture:ipt.value,
enableMousescroll:true,
doubleZoomControls:false,
imgEyecandy:true,
imgEyecandyOpacity:0.5,
smallControls:true,
loaderHtml:'<div class="loader bubblingG"><span id="bubblingG_1"></span><span id="bubblingG_2"></span><span id="bubblingG_3"></span></div> ',
onBeforeImgUpload: function(){ console.log('onBeforeImgUpload') },
onAfterImgUpload: function(){ console.log('onAfterImgUpload') },
onImgDrag: function(){ console.log('onImgDrag') },
onImgZoom: function(){ console.log('onImgZoom') },
onBeforeImgCrop: function(){ console.log('onBeforeImgCrop') },
onAfterImgCrop:function(rep){
var ipt = document.getElementById("titlepic");
if (ipt){
ipt.value = rep.url;
}
},
onReset:function(){ $("#divTitlepicCutBox").hide(); this.destroy();},
onError:function(errormessage){ console.log('onError:'+errormessage) }
}
var cropContainerPreload = new Croppic('divTitlepicCutBox', croppicContainerPreloadOptions);
}
}6、上传在线图片裁剪插件croppic相关文件。
croppic插件的使用演示及相关文件下载,参考:简单功能强大的jQuery在线图片裁剪插件croppi
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/EmpireCMS/2020-05-07/428.html



