更新 我正在使用HTML5 canvas和jQuery/JS的圖像生成器。 我想要完成的是以下內容。如何創建用於組合多個圖像的圖像生成器?
用戶可以上傳2個或最多3個圖像(類型應該是png或jpg)到畫布上。 基因圖像應該等待1080x1920。如果hart只上傳2張圖片,則圖片爲1080x960。如果上傳3張圖片。每個圖像的大小應該是1080x640。
上傳2張或3張圖片後,用戶可以點擊下載按鈕獲取合併圖片,格式爲1080x1920px。它應該使用HTML畫布來完成這件事。
我想出了這一點:
HTML:
<canvas id="canvas">
Sorry, canvas not supported
</canvas><!-- /canvas.offers -->
<input id="fileInput" type="file" />
<a href="#" class="generate">Generate</a>
的jQuery:
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.height = 400;
canvas.width = 800;
var img1 = loadImage('http://www.shsu.edu/dotAsset/0e829093-971c-4037-9c1b-864a7be1dbe8.png', main);
var img2 = loadImage('https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Ikea_logo.svg/266px-Ikea_logo.svg.png', main);
var minImages = 2;
var imagesLoaded = 0;
function main() {
imagesLoaded += 1;
if(imagesLoaded >= minImages) {
ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.save();
ctx.drawImage(img1, 0, 0);
// ctx.translate(canvas.height/2,canvas.width/2); // move to the center of the canvas
// ctx.rotate(270*Math.PI/180); // rotate the canvas to the specified degrees
// ctx.drawImage(img2,0,canvas.height/2);
ctx.translate(-canvas.height/2,canvas.width/2); // move to the center of the canvas
ctx.rotate(90*Math.PI/180); // rotate the canvas to the specified degrees
ctx.drawImage(img2,-img2.width/2,-img2.width/2);
ctx.restore(); // restore the unrotated context
}
}
function loadImage(src, onload) {
var img = new Image();
img.onload = onload;
img.src = src;
console.log(img);
return img;
}
上面的代碼將創建畫布上,並放置兩個圖像(即現在硬編碼在JS)到創建的畫布。它會旋轉90度,但不會位於右側角落。另外第二個圖像應該位於第一個圖像的旁邊。
希望有人可以幫助我擺脫每個圖像並排的旋轉和定位。如果有任何問題,請告訴我。
工作小提琴:https://jsfiddle.net/8ww1x4eq/2/
謝謝你的回答。是否還有一種方法可以上傳更多圖像,並且每幅圖像都將相互依次排列,正如我在上面的問題中提到的那樣。我將檢查SecurityError。如果我有解決方案,我會讓你知道。 – Caspert
您需要將當前畫布保存爲圖像,並在每次添加新圖像時重新繪製它。我已經用鏈接更新了我的答案。注:我不確定內存和性能,但我認爲這是一個資源飢渴的過程來繪製和重新繪製不同類型的圖像... –
看起來我誤解了你對merged_image的問題。你想上傳圖片,而不是保存圖片,不是嗎?如果是這樣,您需要將dataURL發送到上傳主體中的服務器,而不是將其保存到文件中。 –