您好,登錄后才能下訂單哦!
這篇文章主要介紹“web前端開發(fā)中如何實(shí)現(xiàn)圖片編輯器效果”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“web前端開發(fā)中如何實(shí)現(xiàn)圖片編輯器效果”文章能幫助大家解決問題。
該插件是一款脫離jq的移動(dòng)端圖片編輯器。可以應(yīng)用在移動(dòng)端H5頁面或者微信小程序中。
插件實(shí)現(xiàn)的功能為可頁面內(nèi)初始化載入圖片、手動(dòng)添加手機(jī)相冊(cè)內(nèi)的圖片、或者添加服務(wù)器端的圖片(服務(wù)器端需要開啟允許圖片跨域)。擁有多種的編輯模式。支持操作畫布內(nèi)的所有圖片和單獨(dú)設(shè)置某一種圖片的狀態(tài)或者位置等。
插件操作模式支持手勢放大、旋轉(zhuǎn);支持點(diǎn)擊圖片的四個(gè)角落拖拽放大或旋轉(zhuǎn)或者。
支持照片exif自動(dòng)矯正。許多手機(jī)用不同方向拍照時(shí)會(huì)導(dǎo)致圖片在canvas中顯示角度不正常。常規(guī)解決方法是引入exif.js。不過該js大小太大。所以我在這里直接將exif獲取角度的部分提取出來,大大精簡了代碼量。
插件可輸出你期望的分辨率圖片,格式。
開始使用:
var canvasBox = document.querySelector('#picBox');
var canvas = new _Canvas({
box: canvasBox, // 容器
bgColor: '#000', // 背景色
bgPhoto: 'none', // 背景圖
photoModel: 'adaption', // 載入圖片模式(設(shè)置后添加圖片時(shí)默認(rèn)為當(dāng)前設(shè)置模式)
model: 'Cascade' // 模式Cascade為添加的圖片層級(jí)右添加順序決定,autoHierarchy為層級(jí)由選中的圖片為最高級(jí)
})
創(chuàng)建canvas為畫布對(duì)象,調(diào)用初始化函數(shù)init(Object)
dragEvent、zoomEvent、rotateEvent分別是拖拽、縮放、旋轉(zhuǎn)三個(gè)事件監(jiān)聽,傳遞2個(gè)參數(shù)(picArr, target)picArr為畫布內(nèi)的所有圖片對(duì)象數(shù)組,target為當(dāng)前操作的圖片對(duì)象。
callback為'圖片初始化完成的回調(diào)。
canvas.init({
dragEvent: function (picArr, target) { // 監(jiān)聽拖拽事件
console.log('當(dāng)前操作事件:正在拖拽')
},
zoomEvent: function (picArr, target) { // 監(jiān)聽縮放事件
console.log('當(dāng)前操作事件:正在縮放')
},
rotateEvent: function (picArr, target) { // 監(jiān)聽旋轉(zhuǎn)事件
console.log('當(dāng)前操作事件:正在旋轉(zhuǎn)')
},
callback: function () {
console.log('圖片初始化完成...')
}
});
canvas畫布的方法:
toDataURL(Object)
width: 輸出的寬 (必須);
height: 輸出的高 (必須);
type: 輸出圖片格式;
bgColor: 圖片背景色(若設(shè)置了背景圖則背景圖的層級(jí)比背景色高);
callback: 回調(diào)函數(shù)(傳入?yún)?shù)為圖片的baes64)若沒有寫callback則toDataURL會(huì)return圖片的baes64;
$('.outputmodel2').click(function () {
canvas.toDataURL({
width: 750,
height: 600,
type: 'image/png',
callback: function (url) {
$('.outputPic').attr('src', url);
console.log('成功輸出1倍png圖')
}
})
})
addPhoto(Object)
url: 圖片url(必須);
model: 載入圖片模式默認(rèn)為'covered'鋪滿(為數(shù)字時(shí)為固定寬度,adaption為自適應(yīng)顯示);
enable: 是否禁止編輯(Boolean)默認(rèn)為false;
callback: 圖片加載完的回調(diào),參數(shù)為圖片的對(duì)象;
$('.addEnablePic').click(function () {
canvas.addPhoto({
url: './img/pic6.jpg',
model: 200,
enable: true,
callback: function () {
console.log('成功添加一張禁止編輯的圖片')
}
})
})
changeBg(Object)
color: 背景色
photo: 背景圖(url)//為'none'時(shí)移除背景圖
$('.bgColor').click(function () {
var color = '#' + parseInt(Math.random() * 10) + parseInt(Math.random() * 10) + parseInt(Math.random() * 10)
canvas.changeBg({
photo: url,
color: color
})
})
changeParams(Object)
width: '畫布寬度',
height: '畫布高度',
model: '畫布模式' (模式Cascade為添加的圖片層級(jí)由添加順序決定,autoHierarchy為層級(jí)由選中的圖片為最高級(jí))
getNowPhoto()
return 當(dāng)前操作的圖片對(duì)象
clearCanvas()
清空畫布
canvas畫布的屬性:
photos:畫布內(nèi)所有圖片對(duì)象
Photo對(duì)象方法(畫布內(nèi)圖片對(duì)象)
init()
重置圖片大小和位置
getPhotoInfo()
返回圖片的位置信息{model、enable、x(相對(duì)畫布的x)、y(相對(duì)畫布的y)、rotate、scale、width(畫布內(nèi)圖片的寬度)、height(畫布內(nèi)圖片的高度)、actualWidth(圖片實(shí)際寬度)、actualHeight(圖片實(shí)際高度)}
changeInfo(Object)
hierarchy: 層級(jí)(Number)
img: 圖片URL(String)
rotate: 旋轉(zhuǎn)角度(Number)
scale: 放大倍數(shù)(Number)
callback: 修改參數(shù)后的回調(diào)(Function)
$('.changeUrl').click(function () {
var nowPhoto = canvas.getNowPhoto();
if (!nowPhoto) {
alert('未選中任何圖片');
return;
} else {
var nowPhotoInfo = nowPhoto.getPhotoInfo();
nowPhoto.changeInfo({
img: './img/pic7.jpg',
scale: nowPhotoInfo.scale / 1.1,
hierarchy: 1,
rotate: nowPhotoInfo.rotate + 90,
callback: function () {
console.log('成功修改')
}
})
}
})
_delete()
刪除該圖片
關(guān)于“web前端開發(fā)中如何實(shí)現(xiàn)圖片編輯器效果”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。