fabricjs 圖像加載-等比縮放圖像到畫布

fabricjs 加載圖像有兩種方式

fabric.Image 同步

var canvas = new fabric.Canvas("canvas",{
   width:800,
   height:600,
});
// 引入圖片忆绰,或者頁面上已經(jīng)渲染的圖片
const img1 = document.getElementById('img1')
let imgInstance = new fabric.Image(img1,{
    left:0,
    top:280,
    width:260,
    height:260
})
canvas.add(img)

fabric.Image.fromURL 異步

// 異步加載圖片
const asyncLoadImg = (imgURL) => {
    return new Promise((resolve,reject) => {
        // 2.6.0 版本沒有對(duì)圖片加載異常的處理售担,需要自己處理
        fabric.Image.fromURL(imgURL, img => {
            // 加載出錯(cuò)提示停做,否則會(huì)造成渲染出錯(cuò)
            if(img._originalElement === null){
              reject('圖片加載出錯(cuò)啦~~~')  
            }else {
              resolve(img)
            }
        })
        // 4.2.0版本有錯(cuò)誤處理 
        // fabric.Image.fromURL(imgURL, (img,isError) => {})
    })
}

async function initImg(){
    // 這里就不對(duì)錯(cuò)誤處理了
    let img = await asyncLoadImg('../public/img/5.jfif')
    img.set({
        left:0,
        top:0,
        width:100,
        height:100
    })
    
    canvas.add(img)
    canvas.renderAll()
}
image.png

通過上面的代碼我們可以得出, fabric.Image或fabric.Image.fromURL 加載的圖片是以圖片的實(shí)際像素繪制在畫布上兆览,如果原圖大于設(shè)置的寬高苔埋,就會(huì)基于原圖的左上角裁剪固定的寬高,如果原圖小于設(shè)置的寬高亡呵,就會(huì)放大以鋪滿設(shè)置寬高抽活,這兩種都無法按照我們的需求顯示

改變圖片的樣式

  1. 首先要解決的一點(diǎn)就是將原圖按照一定的比例縮放到固定的寬高,fabricjs 提供了 scaleX,scaleY 再次基礎(chǔ)上.修改
// 原圖繪制255*328
let imgInstance2 = new fabric.Image(img2, {
    left: 300,
    top: 280
})
// 固定100*100 原圖左上角開始裁剪100*100
let imgInstance3 = new fabric.Image(img2, {
    left: 450,
    top: 280,
    width: 100,
    height: 100
})
// 獲得x方向的縮放比锰什,scaleX,scaleY都按照此比例縮放下硕,此時(shí)不一定是100*100,除非原圖寬高都一樣
const imgScale = 100/img2.width
let imgInstance4 = new fabric.Image(img2, {
    left: 450,
    top: 280,
    scaleX: imgScale,
    scaleY: imgScale
})
// scaleX,scaleY都按照不同比例縮放,此時(shí)圖片才會(huì)呈現(xiàn)100*100汁胆,其他矩形類似處理梭姓,這樣有一個(gè)弊端,就是會(huì)造成圖片變形嫩码,需要按照實(shí)際需求調(diào)整
const imgHScale = 100/img2.height
let imgInstance5 = new fabric.Image(img2, {
    left: 450,
    top: 280,
    scaleX: imgScale,
    scaleY: imgHScale
})
canvas.add(imgInstance, imgInstance2,imgInstance3,imgInstance4,imgInstance5)
image.png

注意點(diǎn): 圖片如果是異步加載糊昙,加載完一點(diǎn)要調(diào)用 canvas.renderAll() 否則不會(huì)顯示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谢谦,隨后出現(xiàn)的幾起案子释牺,更是在濱河造成了極大的恐慌,老刑警劉巖回挽,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件没咙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡千劈,警方通過查閱死者的電腦和手機(jī)祭刚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涡驮,你說我怎么就攤上這事暗甥。” “怎么了捉捅?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵撤防,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我棒口,道長(zhǎng)寄月,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任无牵,我火速辦了婚禮漾肮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茎毁。我一直安慰自己克懊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布七蜘。 她就那樣靜靜地躺著谭溉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崔梗。 梳的紋絲不亂的頭發(fā)上夜只,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音蒜魄,去河邊找鬼扔亥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谈为,可吹牛的內(nèi)容都是我干的旅挤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伞鲫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼粘茄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秕脓,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤柒瓣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后吠架,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芙贫,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年傍药,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磺平。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魂仍。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拣挪,靈堂內(nèi)的尸體忽然破棺而出擦酌,到底是詐尸還是另有隱情,我是刑警寧澤菠劝,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布赊舶,位于F島的核電站,受9級(jí)特大地震影響闸英,放射性物質(zhì)發(fā)生泄漏锯岖。R本人自食惡果不足惜介袜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一甫何、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遇伞,春花似錦辙喂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渐排,卻和暖如春炬太,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驯耻。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工亲族, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人可缚。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓霎迫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親帘靡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子知给,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容