From f92553538eb6e847876e774d9535c067e1d44037 Mon Sep 17 00:00:00 2001 From: Yoshihiro Yamazaki Date: Tue, 4 Dec 2012 23:09:15 +0900 Subject: [PATCH] =?utf8?q?-=20ibit=20=E3=81=AB=E9=85=8D=E5=88=97=E3=82=92?= =?utf8?q?=E6=B8=A1=E3=81=99=E5=87=A6=E7=90=86=E3=82=92=E5=BF=98=E3=82=8C?= =?utf8?q?=E3=81=A6=E3=81=9F=E3=81=AE=E3=81=A7=E5=85=A5=E3=82=8C=E3=81=9F?= =?utf8?q?=E3=80=82=20-=20offset=20=E3=81=8C=202=E3=81=A4(marker=E3=81=AE?= =?utf8?q?=E5=88=86)=E5=A4=9A=E3=81=8B=E3=81=A3=E3=81=9F=E3=80=82=20-=20de?= =?utf8?q?fault=20=E3=81=AE=20marker=20=E3=81=A7=20seek=20=E3=82=92?= =?utf8?q?=E5=BF=98=E3=82=8C=E3=81=A6=E3=81=9F=E3=81=AE=E3=81=A7=E5=85=A5?= =?utf8?q?=E3=82=8C=E3=81=9F=E3=80=82=20-=20DQT=20=E3=81=8C=E7=84=A1?= =?utf8?q?=E3=81=84=E3=81=AE=E3=81=AB=20jpegTables=20=E3=81=8C=E7=84=A1?= =?utf8?q?=E3=81=84=E6=99=82=E3=81=AB=20console.error=20(=E5=AE=9A?= =?utf8?q?=E7=BE=A9=E3=82=92=20console.js=20=E3=81=AB=E8=BF=BD=E5=8A=A0)?= =?utf8?q?=20-=20DQT,=20DHT=20=E3=81=8C=E8=A4=87=E6=95=B0=E3=81=82?= =?utf8?q?=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=AB=E5=AF=BE=E5=87=A6=E3=80=82(?= =?utf8?q?=E6=9C=80=E5=BE=8C=E3=81=AE=E3=81=A0=E3=81=91=E8=A6=8B=E3=82=8C?= =?utf8?q?=E3=81=B0=E8=89=AF=E3=81=84=E3=81=8B=E3=81=A8=E6=80=9D=E3=81=A3?= =?utf8?q?=E3=81=9F=E3=82=89=E9=81=95=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- console.js | 7 +++++++ src/bitmap.js | 50 +++++++++++++++++++++++++++++++------------------- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/console.js b/console.js index 7cb3a0f..f116359 100644 --- a/console.js +++ b/console.js @@ -13,3 +13,10 @@ console.log = function(var_args) { console.debug = function(var_args) { return void 0; } + +/** +* @param {...*} var_args +*/ +console.error = function(var_args) { + return void 0; +} diff --git a/src/bitmap.js b/src/bitmap.js index 745a41e..db442ea 100644 --- a/src/bitmap.js +++ b/src/bitmap.js @@ -1,5 +1,6 @@ goog.provide('FlappBitmap'); goog.require('FlappIBit'); +goog.require('FlappString'); goog.scope(function() { @@ -13,22 +14,28 @@ FlappBitmap = function() { FlappBitmap.jpegChunkOffsets = function(jpegData) { var offsetTable = {}; var ibit = new FlappIBit(); + ibit.inputArray(jpegData); while (ibit.hasNext(2)) { - var marker = ibit.ui16be(); var offset = ibit.getBytePos(); + var marker = ibit.ui16be(); var length; + console.log(marker); switch (marker) { case 0xFFD8: // SOI case 0xFFD9: // EOI break; case 0xFFDA: // SOS + [RST] + EOI length = ibit.len() - offset; - offsetTable[marker] = [offset, length] + offsetTable[marker] = [[offset, length]]; break; default: - length = ibit.ui16be() + 2; - offsetTable[marker] = [offset, length] - + length = 2 + ibit.ui16be();; + ibit.seek(length - 4, 0); + if (marker in offsetTable) { + offsetTable[marker].push([offset, length]); + } else { + offsetTable[marker] = [[offset, length]]; + } break; } } @@ -39,6 +46,10 @@ FlappBitmap.toJpeg = function(swfJpeg, jpegTables) { var offsetTable = FlappBitmap.jpegChunkOffsets(swfJpeg); var hasDQT = (0xFFDB in offsetTable); if (hasDQT === false) { + if (jpegTables === null) { + console.error("swfJpeg has no DQT and jpegTables is null."); + return ""; // TODO: return dummy small image + } var offsetTable2 = FlappBitmap.jpegChunkOffsets(jpegTables); } var jpegArray = [0xFF, 0xD8]; // SOI @@ -46,21 +57,22 @@ FlappBitmap.toJpeg = function(swfJpeg, jpegTables) { var jpegOrder = [0xFFE0, 0xFFC0, 0xFFDB, 0xFFC4, 0xFFDA]; for (var i = 0, l = jpegOrder.length; i < l ; i++) { var marker = jpegOrder[i]; - var swfJpegOffset = (marker in offsetTable); - if (swfJpegOffset) { - var entry = offsetTable[marker]; - } else { - var entry = offsetTable2[marker]; - } - var offset = entry[0]; - var enfoffset = offset + entry[1]; - for (var j = offset; j < enfoffset ; j++) { - if (swfJpegOffset) { - jpegArray.join(swfJpeg[j]); - } else { - jpegArray.join(jpegTables[j]); + var table, jpeg; + if (marker in offsetTable) { + table = offsetTable; + jpeg = swfJpeg; + } else { + table = offsetTable2; + jpeg = jpegTables; + } + var chunkOffsets = table[marker]; + for (var j = 0, jl= chunkOffsets.length; j < jl ; j++) { + var offset = chunkOffsets[j][0]; + var endoffset = offset + chunkOffsets[j][1]; + for (var k = offset; k < endoffset ; k++) { + jpegArray.push(jpeg[k]); } - } + } } return FlappString.ArrayToString(jpegArray); }; -- 2.11.0