2008-10-01 41 views
9

我想知道是否有一種方法可以僅使用JavaScript將多個圖像組合成單個圖像。這是Canvas能夠做的事情嗎?效果可以通過定位完成,但是您可以將它們組合成單個圖像進行下載嗎?你可以結合使用JavaScript的多個圖像到一個單一的?

更新2008年10月1日:

謝謝你的建議,我幫助上一個JS/CSS的唯一網站的人工作,與jQuery和他們希望有一些MacOS的碼頭般的圖像效果多個圖像相互重疊。我們提出的解決方案只是絕對的定位,並使用相對定位的父母<div>的效果。將圖像合併起來並在單個圖像上創建效果會容易得多。

然後,它讓我想到像Picnik這樣的在線圖像編輯器,並想知道是否可以使用基於瀏覽器的圖像編輯器來編寫只有JavaScript編寫的photoshop功能。我想這不是一種可能性,也許在將來呢?

回答

14

我知道這是一個老問題,OP找到了一個解決方法,但是如果圖像和畫布已經是HTML頁面的一部分,這將工作。

<img id="img1" src="imgfile1.png"> 
<img id="img2" src="imgfile2.png"> 
<canvas id="canvas"></canvas> 

<script type="text/javascript"> 
var img1 = document.getElementById('img1'); 
var img2 = document.getElementById('img2'); 
var canvas = document.getElementById('canvas'); 
var context = canvas.getContext('2d'); 

canvas.width = img1.width; 
canvas.height = img1.height; 

context.globalAlpha = 1.0; 
context.drawImage(img1, 0, 0); 
context.globalAlpha = 0.5; //Remove if pngs have alpha 
context.drawImage(img2, 0, 0); 
</script> 

或者,如果你想在飛行加載圖片:

<canvas id="canvas"></canvas> 
<script type="text/javascript"> 
var canvas = document.getElementById('canvas'); 
var context = canvas.getContext('2d'); 
Image img1 = new Image(); 
Image img2 = new Image(); 

img1.onload = function() { 
    canvas.width = img1.width; 
    canvas.height = img1.height; 
    img2.src = 'imgfile2.png'; 
}; 
img2.onload = function() { 
    context.globalAlpha = 1.0; 
    context.drawImage(img1, 0, 0); 
    context.globalAlpha = 0.5; //Remove if pngs have alpha 
    context.drawImage(img2, 0, 0); 
};   

img1.src = 'imgfile1.png'; 
</script> 
3

我不認爲你可以或者希望用客戶端的JavaScript來做到這一點(「把它們組合成一個單一的圖像下載」),因爲它在客戶端上運行:即使你可以將它們組合成一個單一的圖像文件在客戶端,那時你已經下載了所有的單個圖像,所以合併是毫無意義的。

+0

我一直在尋找同樣的解決方案,只想說這有道理,當談到項目和每一個巨大的數量其中有多個自定義選項,例如T恤(顏色)或數字海報(背景顏色)。 這可以節省很多時間在列表項上。 – bard 2016-03-22 16:45:07

-1

如果它們是一對JPG格式,在您的控制之下,可能是兩個方向上的倍數爲8。這不需要重新編碼,只需重新組合像素塊即可。

0

嗯,問題是你不能從JavaScript下載,因爲JavaScript運行在客戶端上,並且從服務器上下載纔有意義,所以它沒有多大意義。你能告訴我們你想達到的目標嗎?你的最終目標是什麼?我們可能會提出更好的建議。

相關問題