主頁(yè) > 知識(shí)庫(kù) > 一個(gè)基于canvas的移動(dòng)端圖片編輯器的實(shí)現(xiàn)

一個(gè)基于canvas的移動(dòng)端圖片編輯器的實(shí)現(xiàn)

熱門標(biāo)簽:拓展地圖標(biāo)注 南昌仁和怎么申請(qǐng)開通400電話 電話機(jī)器人黑斑馬免費(fèi) 平?jīng)龅貓D標(biāo)注位置怎么弄 只辦理400電話 高德地圖標(biāo)注地點(diǎn)糾錯(cuò) 電話機(jī)器人電銷系統(tǒng)掙話費(fèi) 如何獲取地圖標(biāo)注客戶 機(jī)器人外呼系統(tǒng)存在哪些能力

項(xiàng)目地址: https://github.com/xiaosu95/canvas_mobile_drag

點(diǎn)擊查看demo(在移動(dòng)端上查看)

該插件是一款脫離jq的移動(dòng)端圖片編輯器??梢詰?yīng)用在移動(dòng)端H5頁(yè)面或者微信小程序中。

  • 插件實(shí)現(xiàn)的功能為可頁(yè)面內(nèi)初始化載入圖片、手動(dòng)添加手機(jī)相冊(cè)內(nèi)的圖片、或者添加服務(wù)器端的圖片(服務(wù)器端需要開啟允許圖片跨域)。擁有多種的編輯模式。支持操作畫布內(nèi)的所有圖片和單獨(dú)設(shè)置某一種圖片的狀態(tài)或者位置等。
  • 插件操作模式支持手勢(shì)放大、旋轉(zhuǎn);支持點(diǎn)擊圖片的四個(gè)角落拖拽放大或旋轉(zhuǎn)或者。
  • 支持照片exif自動(dòng)矯正。許多手機(jī)用不同方向拍照時(shí)會(huì)導(dǎo)致圖片在canvas中顯示角度不正常。常規(guī)解決方法是引入exif.js。不過(guò)該js大小太大。所以我在這里直接將exif獲取角度的部分提取出來(lái),大大精簡(jiǎn)了代碼量。
  • 插件可輸出你期望的分辨率圖片,格式。

開始使用

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)于一個(gè)基于canvas的移動(dòng)端圖片編輯器的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)canvas 移動(dòng)端圖片編輯器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標(biāo)簽:西藏 棗莊 池州 漯河 新疆 青島 永州 遼源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一個(gè)基于canvas的移動(dòng)端圖片編輯器的實(shí)現(xiàn)》,本文關(guān)鍵詞  一個(gè),基于,canvas,的,移動(dòng),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一個(gè)基于canvas的移動(dòng)端圖片編輯器的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于一個(gè)基于canvas的移動(dòng)端圖片編輯器的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章