チェンジセット 1579
- コミット日時:
- 2008/10/11 20:13:10 (3 年前)
- ファイル:
-
- ruby/jsplash/trunk/client2/demo_20081001.xml (更新) (1 diff)
- ruby/jsplash/trunk/client2/index.xml (更新) (1 diff)
- ruby/jsplash/trunk/client2/jsplash/objects.js (更新) (2 diffs)
- ruby/jsplash/trunk/client2/jsplash/player.js (更新) (2 diffs)
- ruby/jsplash/trunk/client2/jsplash/shaperenderer.js (更新) (3 diffs)
- ruby/jsplash/trunk/client2/rocket_demo.xml (更新) (1 diff)
- ruby/jsplash/trunk/jextract.rb (更新) (10 diffs)
- ruby/jsplash/trunk/rawswf.rb (更新) (1 diff)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
ruby/jsplash/trunk/client2/demo_20081001.xml
r1565 r1579 56 56 <p id="statusout"> </p> 57 57 <p>playing on javascript with JSplash</p> 58 <p id="sout">starting <em>JSplash Player 0.4. 9</em>...<br />-------------------------------------<br /></p>58 <p id="sout">starting <em>JSplash Player 0.4.10</em>...<br />-------------------------------------<br /></p> 59 59 <svg id="svgrt" xmlns="http://www.w3.org/2000/svg" style="width: 100px; height: 100px;"> 60 60 </svg> ruby/jsplash/trunk/client2/index.xml
r1565 r1579 54 54 <div id="progbar"><div> </div></div> 55 55 <p id="statusout"> </p> 56 <p id="sout"><em>JSplash Player</em> 0.4. 9<br />-------------------------------------<br /></p>56 <p id="sout"><em>JSplash Player</em> 0.4.10<br />-------------------------------------<br /></p> 57 57 <svg id="svgrt" xmlns="http://www.w3.org/2000/svg" style="width: 100px; height: 100px;"> 58 58 </svg> ruby/jsplash/trunk/client2/jsplash/objects.js
r1566 r1579 782 782 s.mouse_down = false; 783 783 s.is_stage = true; 784 s.bitmapRefs = {}; 784 785 785 786 Object.extend(s, { … … 817 818 toString: function() { 818 819 return "Stage"; 819 } 820 820 }, 821 822 registerBitmaps: function(list) { 823 var len = list.length; 824 for (var i = 0;i < len;i++) { 825 this.registerBitmapRef(list[i]); 826 } 827 }, 828 829 registerBitmapRef: function(b) { 830 if (/([0-9]+)\./.test(b.n)) { 831 var oid = RegExp['$1'] - 0; 832 this.bitmapRefs[oid] = b; 833 } 834 }, 835 836 getImageRef: function(oid) { 837 return this.bitmapRefs[oid] || null; 838 } 821 839 } ); // extend 822 840 ruby/jsplash/trunk/client2/jsplash/player.js
r1561 r1579 23 23 svg.style.height = swf.pxHeight + "px"; 24 24 this.stage = new JSplash.ObjectInstance.createStageObject(swf.taglist, svg, swf.label_map); 25 26 if (swf.bitmaps) 27 this.stage.registerBitmaps(swf.bitmaps); 28 25 29 this.disposer = new JSplash.ShapeDisposer(this.stage); 26 30 … … 206 210 this.frameRate = h.frameRate; 207 211 this.taglist = sdat.taglist; 208 this.label_map = sdat.label_map; 212 this.label_map = sdat.label_map; 213 this.bitmaps = sdat.bitmaps; 209 214 } 210 215 ruby/jsplash/trunk/client2/jsplash/shaperenderer.js
r1565 r1579 78 78 var fid = "gf"+this.shape_id+"_"+fi; 79 79 var filldata = this.fillStyles[fi-1]; 80 if (!filldata.grad) 80 81 if (!filldata.grad && !filldata.bmp) 81 82 return null; 82 83 var attrs = {id: fid, gradientUnits: 'userSpaceOnUse', x1: -819, x2: 819}; 83 84 var imgdat; 85 if (filldata.bmp) { 86 imgdat = JSplash.gPlayer.stage.getImageRef(filldata.bmp); 87 if (!imgdat) 88 return null; 89 } 90 91 var attrs = 92 filldata.grad ? {id: fid, gradientUnits: 'userSpaceOnUse', x1: -819, x2: 819} 93 : {id: fid, patternUnits: 'userSpaceOnUse'}; 84 94 if (filldata.mov || filldata.scl || filldata.skw) { 85 95 var M =[1, 0, 0, 1, 0, 0]; … … 98 108 M[2] = filldata.skw[1]; 99 109 } 100 101 attrs.gradientTransform = "matrix("+M.join(' ')+")"; 102 } 103 104 if (filldata.grad!=1) 105 { 106 attrs.r = 819; 107 attrs.fx = 0; 108 attrs.fy = 0; 109 } 110 111 var gdef = JSplash.$svg((filldata.grad==1) ? "linearGradient" : "radialGradient", attrs); 112 JSplash.defsElement.appendChild(gdef); 113 114 115 var len = filldata.s.length; 116 for (var i = 0;i < len;i++) { 117 var attr = {'stop-color': ('#'+filldata.c[i]), offset: (filldata.s[i] / 255)}; 118 if (filldata.a) { 119 attr["stop-opacity"] = filldata.a[i]; 120 } 121 var stp = JSplash.$svg("stop", attr); 122 gdef.appendChild(stp); 110 111 if (imgdat) { 112 M[0] /= 20; 113 M[3] /= 20; 114 M[4] /= 20; 115 M[5] /= 20; 116 117 M[4] += imgdat.w/2; 118 M[5] += imgdat.h/2; 119 } 120 121 if (filldata.grad) 122 attrs.gradientTransform = "matrix("+M.join(' ')+")"; 123 else 124 attrs.patternTransform = "matrix("+M.join(' ')+")"; 125 } 126 127 var gdef; 128 if (filldata.grad) { 129 if (filldata.grad!=1) 130 { 131 attrs.r = 819; 132 attrs.fx = 0; 133 attrs.fy = 0; 134 } 135 136 gdef = JSplash.$svg((filldata.grad==1) ? "linearGradient" : "radialGradient", attrs); 137 JSplash.defsElement.appendChild(gdef); 138 139 140 var len = filldata.s.length; 141 for (var i = 0;i < len;i++) { 142 var attr = {'stop-color': ('#'+filldata.c[i]), offset: (filldata.s[i] / 255)}; 143 if (filldata.a) { 144 attr["stop-opacity"] = filldata.a[i]; 145 } 146 var stp = JSplash.$svg("stop", attr); 147 gdef.appendChild(stp); 148 } 149 } 150 else { 151 attrs.width = imgdat.w; 152 attrs.height = imgdat.h; 153 154 gdef = JSplash.$svg("pattern", attrs); 155 JSplash.defsElement.appendChild(gdef); 156 157 var img = JSplash.$svg("image", {width: imgdat.w, height: imgdat.h}); 158 img.setAttributeNS("http://www.w3.org/1999/xlink", "href", JSplash.LOAD_DIR + "/res/" + imgdat.n); 159 gdef.appendChild(img); 123 160 } 124 161 … … 490 527 if (style.rgb) 491 528 style_str = '#'+style.rgb; 492 else if (style.grad )529 else if (style.grad || style.bmp) 493 530 style_str = 'url(#' + this.lookupFillId(fi)+')'; 494 531 ruby/jsplash/trunk/client2/rocket_demo.xml
r1565 r1579 56 56 <p id="statusout"> </p> 57 57 <p>playing on javascript with JSplash</p> 58 <p id="sout">starting <em>JSplash Player 0.4. 9</em>...<br />-------------------------------------<br /></p>58 <p id="sout">starting <em>JSplash Player 0.4.10</em>...<br />-------------------------------------<br /></p> 59 59 <svg id="svgrt" xmlns="http://www.w3.org/2000/svg" style="width: 100px; height: 100px;"> 60 60 </svg> ruby/jsplash/trunk/jextract.rb
r1565 r1579 1 1 $KCODE = 's' 2 2 require 'rexml/document' 3 require 'rawswf' 3 4 4 5 $top_frame_index = 0 5 6 $top_tag_index = 0 7 8 $shared_jpeg_table = nil 9 $bitmap_refs = nil 6 10 7 11 def make_rgb(attrs) … … 20 24 21 25 "L:#{vL},R:#{vR},T:#{vT},B:#{vB}" 26 end 27 28 def read_bitmap_fill(ls) 29 bid = ls.attributes['objectID'].to_i 30 31 trans_elem = ls.elements['./matrix/Transform'] 32 trans = nil 33 34 trans = trans_elem.attributes if trans_elem 35 mov = nil 36 scl = nil 37 skw = nil 38 if trans 39 a = trans 40 41 mov = ",mov:[#{a['transX'].to_f},#{a['transY'].to_f}]" if a['transX'] 42 scl = ",scl:[#{a['scaleX'].to_f},#{a['scaleY'].to_f}]" if a['scaleX'] 43 skw = ",skw:[#{a['skewX'].to_f},#{a['skewY'].to_f}]" if a['skewX'] 44 end 45 46 "{bmp:#{bid}#{mov}#{scl}#{skw}}" 22 47 end 23 48 … … 71 96 when 'RadialGradient' 72 97 styles << read_gradient(ch, 1) 98 when 'ClippedBitmap' 99 styles << read_bitmap_fill(ch) 73 100 end 74 101 } … … 151 178 end 152 179 180 def self.readJPEGTables(tg, nest, fi) 181 $shared_jpeg_table = tg.elements['./data'].text 182 end 183 153 184 def self.readDefineShape5(tg, nest, fi) 154 185 TagReaders.readDefineShape(tg, nest, fi, 5) … … 175 206 176 207 "{tag:JSplash.tDefineShape#{v}, id:#{tg.attributes['objectID']}, bounds:{#{make_bounds(bds)}}, fill_styles:[\n #{f_json}\n], line_styles:[\n #{l_json}\n], shape:[\n#{shapes}\n]}" 208 end 209 210 def self.readDefineBits(tg, nest, fi) 211 $bitmap_refs = [] if !$bitmap_refs 212 213 db = RawSWF::RawDefineBitsTag.new(tg.elements['./data/data'].text) 214 db.id = tg.attributes['objectID'].to_i 215 $bitmap_refs << db 177 216 end 178 217 … … 308 347 if tg.name == "Export" || tg.name == "DoInitAction" 309 348 STDERR.puts "ignored [#{tg.name}] at #{$top_tag_index}" 349 next 350 elsif tg.name == "UnknownTag" && tg.attributes['id'].to_i(16) == 8 # JPEGTables 351 TagReaders.readJPEGTables(tg, nest, findex) 352 next 353 elsif tg.name == "DefineBits" 354 TagReaders.readDefineBits(tg, nest, findex) 310 355 next 311 356 end … … 338 383 end 339 384 385 def check_res_dir(outdir) 386 rdir = "#{outdir}/res" 387 Dir::mkdir(rdir) if !File.exists?(rdir) 388 389 return rdir 390 end 391 392 def export_bitmaps(outdir) 393 return if !$bitmap_refs 394 395 rdir = check_res_dir(outdir) 396 $bitmap_refs.each {|b| 397 out_name = "#{rdir}/#{b.id}" 398 if RawSWF::RawDefineBitsTag === b 399 raise "JPEGTables not found in input SWF" if !$shared_jpeg_table 400 401 b.table_data = $shared_jpeg_table 402 b.export_file(out_name + ".jpg") 403 end 404 } 405 end 406 340 407 #---------------------------- 341 408 342 in_swf = ARGV[0] 343 out_dir = ARGV[1] 409 in_swf = ARGV[0] 410 out_dir = ARGV[1] 411 split_thresh = ARGV[2] 412 344 413 if !in_swf 345 414 puts "USAGE: ruby jconvert.rb [in.swf]" … … 347 416 end 348 417 349 if !out_dir 350 out_dir = "movie_temp_out" 351 Dir::mkdir(out_dir) if !File.exists?(out_dir) 352 end 418 split_thresh = split_thresh ? split_thresh.to_i : 25000 419 420 # check output dir 421 out_dir = "movie_temp_out" if !out_dir 422 Dir::mkdir(out_dir) if !File.exists?(out_dir) 353 423 354 424 STDERR.puts "extracting..." … … 371 441 372 442 top_tags = parse_taglist(tags.elements, lmap) 373 split_file = (top_tags.length > 25000)443 split_file = (top_tags.length > split_thresh) 374 444 375 445 out1 = "#{out_dir}/movie1.js" 446 447 export_bitmaps(out_dir) 376 448 377 449 File.open(out1,'w'){|f1| 378 450 next_file = nil 379 tags_1 = top_tags.slice!(0, 25000)451 tags_1 = top_tags.slice!(0, split_thresh) 380 452 if split_file 381 453 next_file = ", 'movie2.js'" … … 384 456 f1.puts "JSplash.load_swf( {" 385 457 f1.puts " header: {frameRate: #{swf.frame_rate}, frames: #{swf.frames}, width: #{swf.width}, height: #{swf.height}}," 458 f1.puts " bitmaps: [#{$bitmap_refs.map{|b| "{n:'#{b.id}.#{b.ftype}',w:#{b.width},h:#{b.height}}"}.join(',')}]," if $bitmap_refs 386 459 f1.puts " taglist: [" 387 460 f1.puts tags_1.join(",\n") ruby/jsplash/trunk/rawswf.rb
r1568 r1579 26 26 27 27 class RawDefineBitsTag 28 attr_accessor :id 29 30 attr_reader :width 31 attr_reader :height 32 28 33 def initialize(b64) 29 34 @raw = Base64.decode64(b64) 35 extract_size 36 end 37 38 def extract_size 39 i = 0 40 while(true) 41 break if @raw[i] == 0xff && @raw[i+1] == 0xc0 42 i += 1 43 44 raise if i > 10000 45 end 46 47 i += 5 48 @height = (@raw[i]<<8) | @raw[i+1] 49 50 i += 2 51 @width = (@raw[i]<<8) | @raw[i+1] 30 52 end 31 53 32 54 def table_data=(b64) 33 55 @raw_tbl = Base64.decode64(b64) 56 end 57 58 def ftype 59 "jpg" 34 60 end 35 61

