由於瀏覽器知道如何處理JPG文件,有沒有辦法讓它們動態地顯示JPG文件的實際二進制數據並允許它們解碼它?JavaScript - 從二進制JPG數據創建圖像
我無法提供該文件作爲正常的image.src =「path.jpg」,因爲數據最初是在JS中解析的另一個文件的一部分。
此外,我有奇怪的JPG文件存儲阿爾法,所以像https://github.com/notmasteryet/jpgjs庫不能處理它們。
由於瀏覽器知道如何處理JPG文件,有沒有辦法讓它們動態地顯示JPG文件的實際二進制數據並允許它們解碼它?JavaScript - 從二進制JPG數據創建圖像
我無法提供該文件作爲正常的image.src =「path.jpg」,因爲數據最初是在JS中解析的另一個文件的一部分。
此外,我有奇怪的JPG文件存儲阿爾法,所以像https://github.com/notmasteryet/jpgjs庫不能處理它們。
您可以使用Blob s從二進制數據創建對象,稍後您將該對象作爲圖像解碼的URL傳遞。假設你已經存儲類型數組的二進制數據,你可以做這樣的事情:
var blob = new Blob([myTypedArray], {type: 'application/octet-binary'});
var url = URL.createObjectURL(blob);
現在,您可以通過該網址爲圖像的源:
var img = new Image;
img.onload = function() {
URL.revokeObjectURL(url);
...
};
img.src = url;
請注意,您仍然有保證您傳入的數據是瀏覽器可以處理的有效圖像格式。
這看起來很棒,但遺憾的是它會掉落Alpha通道(全部變成不透明):( – user2503048
Alpha不透明的像素會發生變化,所以我假設瀏覽器預先乘上Alpha通道然後刪除它。太糟糕了,因爲這是輝煌和快速的(並且比30KB +解碼器小得多)。 – user2503048
有沒有辦法讓瀏覽器讀取二進制代碼,最接近你可能是base64,現代瀏覽器將讀取。 – adeneo
爲了得到base64字符串,我需要先解碼JPG,然後再開始。 – user2503048
「存儲阿爾法的怪異JPG文件」是什麼意思?這真的是2圖像文件:表示alpha通道的jpg +灰度圖像?如果是的話,那麼(1)分開這兩個圖像,(2)用像jpgjs這樣的庫對它們進行解碼,(3)從解碼的jpgs創建2個javascript圖像對象,(4)創建2個畫布並將兩個圖像繪製到畫布, (5)使用context.getImageData將顏色.jpg中的rgb通道與灰度.jpg中的alpha遮罩相結合,(6)使用context.putImageData將組合像素數據寫入畫布,(7)使用canvas.toDataURL創建base64圖像數據。 – markE