我有一個HTML5畫布元素,我想將其作爲單色bmp保存到服務器。我已經看到了將它保存爲彩色bmp的例子,但是由於尺寸和顏色空間的限制,我的應用程序需要它是一個小的單色bmp。有誰知道這是一個簡單的解決方案的(還是我將不得不寫一個類從頭創建一個bmp文件?)將HTML5畫布另存爲單色bmp
1
A
回答
1
我找到了一個很好的解決方案通過關閉這個示例代碼的工作:rephrase.net/box/bitmap的作者幫助我實現了一個可以將像素數組轉換爲單色位圖的函數。從那裏我能夠獲取畫布數據並遍歷它,並將其解析爲像素數組,然後將其轉換爲單色bmp。
我建立這個功能,方便基於α值轉換畫布數據(因爲畫布數據也單色在我的應用程序)的像素陣列可以由jsbmp腳本中使用:
function createBMP(canvas) {
var context = canvas.getContext("2d");
var width = canvas.width;
var height = canvas.height;
var imageData = context.getImageData(0, 0, width, height);
var data = imageData.data;
//create pixel array from canvas based on alpha
var pixels = [];
for (var i = data.length - 1; i > 0; i -= 4) {
if (i > 0) {
if (data[i] > 125) {
pixels.push("000000");
} else {
pixels.push("ffffff");
}
}
}
//unmirror
var pixarray = [];
for (var i = height - 1; i > -1; i--) {
var row = [];
for (var j = 0; j < width; j++) {
row.push(pixels[(i * width) + j]);
}
for (var j in row) {
pixarray.push(row[j]);
}
}
pixarray.reverse();
return bmp_mono(width, height, pixarray);
}
而這裏是bmp_mono代碼:
/*
Create an uncompressed Windows bitmap (monochrome) given width, height and an
array of pixels.
Pixels should be in BMP order, i.e. starting at the bottom left, going up
one row at a time.
*/
function bmp_mono(width, height, pixarray, palette) {
var rowsize = Math.ceil(width/8);
var rowpadding = 4 - (rowsize % 4);
if (typeof palette == 'undefined')
palette = ['000000', 'ffffff'];
var j, pix, mod;
pixarray.reverse();
var pixels = [];
var b = 0;
for (var i=0; i<height; ++i) {
row = [];
for (j=0; j<width; ++j) {
mod = j % 8;
pix = pixarray.pop();
if (parseInt(pix, 16) != 0) {
b = b | Math.pow(2, 7-mod);
}
if (mod == 7 || j == width-1) {
pixels.push(String.fromCharCode(b));
b = 0;
}
}
for (j=0; j<rowpadding; ++j) {
pixels.push("\x00");
}
}
return _bmp(width, height, palette, pixels.join(""), 1, 0);
}
1
這是一個部分解決方案,因爲它不將其轉換爲位圖,但是是一個PNG。您看到的第一張圖像是畫布,第二張是原始圖像,第三張是從畫布放入圖像的數據。
如果有是一個bmp,你可以嘗試檢查了這一點,對數據改變爲BMP
相關問題
- 1. 將畫布另存爲PNG
- 2. 將畫布另存爲jpg
- 3. 將畫布另存爲PNG
- 4. 將畫布另存爲PNG
- 5. HTML5畫布顏色
- 6. HTML5將畫布保存爲PNG
- 7. 將HTML5畫布保存爲數據
- 8. 畫布 - 將畫布另存爲PNG並且不顯示畫布
- 9. HTML5畫布 - 着色問題
- 10. html5畫布圈調色板
- 11. HTML5畫布顏色文本
- 12. HTML5畫布圖像變色
- 13. HTML5畫布 - 更改顏色
- 14. html5畫布單元
- 15. 將彩色bmp轉換爲灰度bmp?
- 16. 將畫布另存爲圖像
- 17. 將畫布另存爲圖像Internet Explorer
- 18. HTML5「畫布爲空」
- 19. 1bpp單色BMP
- 20. 將mathml呈現爲html5畫布爲png
- 21. 將矢量轉換爲HTML5畫布(DXF轉爲畫布座標)
- 22. html5畫布緩存瓷磚
- 23. 保存HTML5畫布數據
- 24. html5畫布繪製/保存
- 25. 將一張像素爲HTML5畫布
- 26. 將HTML5畫布調整爲父項
- 27. 將html5畫布示例轉換爲svg
- 28. 將PictureStream轉換爲HTML5畫布
- 29. 從BMP或HTML5創建GRF畫布像素數據
- 30. 將OpenGL畫布座標轉換爲HTML5畫布座標
打賭你一個不錯的JPG或PNG圖片會比你的單色位圖,甚至更小的... – Blindy
一定是因爲我所使用的文件的單色BMP。 –