2016-05-26 148 views

回答

1

繪圖過程

通過去除紅色區域使得alpha通道出來的而不是背景圖像離線準備,然後用它像這樣:

  • 畫出視頻與變換帆布施加緊密匹配形狀加上一點重疊
  • 在視頻頂部繪製背景(或第一次繪製後的部分)。這會掩蓋不完美的視頻邊緣。

轉型

離線過程:

在動作:

  • 量表畫布和所希望的大小
  • 應用變換,繪製視頻的歸一化值,繪製背景疊加在視頻
  • 的頂

而且由於大多數視頻最多是每秒30幀,因此您還可以將繪圖循環調整爲一半以便爲其他人留下更多資源(使用requestAnimationFrame()toggle flag)。

替代做法:

準備一個視頻的一切設置爲你想要的。它應該壓縮得很好,因爲周圍的區域不會改變(使用長的關鍵幀間隔),在這種情況下背景不包含太多的細節,因爲低景深也是有幫助的。

1

......它不能與本地HTML5畫布轉換完成。

您正在嘗試將顯示Canvas內容(==您的視頻)轉換爲非平行四邊形 - 這對於原生Canvas轉換是不可能的。畫布只能重新塑造成平行四邊形。

但是...

可以扭曲畫布接近你想要的顯示

可以與天然帆布進行金平行四邊形此圖像中變換

enter image description here

實施例的代碼演示:

var canvas=document.getElementById("canvas"); 
 
var ctx=canvas.getContext("2d"); 
 
var cw=canvas.width; 
 
var ch=canvas.height; 
 

 
var angle=-Math.PI*.06; 
 
var img=new Image(); 
 
img.onload=start; 
 
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/billboard1.jpg"; 
 
function start(){ 
 
    cw=canvas.width=img.width; 
 
    ch=canvas.height=img.height; 
 
    ctx.drawImage(img,0,0); 
 
    ctx.transform(1,Math.tan(angle),0,1,0,0); 
 
    ctx.strokeStyle='gold'; 
 
    ctx.lineWidth=4; 
 
    ctx.strokeRect(333,135,275,150); 
 
}
<canvas id="canvas" width=300 height=300></canvas>

+0

好的,是不是有其他方法?我試圖讓視頻形狀適合所需的幀...並調整窗口大小改變時的自動調整(就像我已經與幀管理)。使用CSS管理視頻,但窗口大小發生變化時不會改變高度。感謝壽。 –

+0

通過將視頻圖像切片成許多垂直切片,然後將它們拉伸以適應廣告牌,可以「僞造」非平行歪斜。但是,以每秒24-30幀的速度進行切片和拉伸將導致除最快速設備之外的所有設備抖動。 – markE

+0

我該如何實現這一目標? –