These pages are written by only Japanese.
|
Namazu for hns による簡易全文検索です。 詳細は 詳細指定/ヘルプをご参照下さい。 |
|||||||||||||||||||||||||||||||||||||||||||||
$oldSize= $swfed->getBitmapSize($image_id); $scale_x = $oldSize['width'] / $newSize['width']; // 逆数 $scale_y = $oldSize['height'] / $newSize['height']; // 逆数 $shape_id_list = $swfed->getShapeIdListByBitmapRef($image_id); foreach ($shape_id_list as $shape_id) { $swfed->applyShapeMatrixFactor($shape_id, $scale_x, $scale_y, 0, 0, 0); }のように出来て、$shape_id_list を何らかの方法(memcached とか)で cache すれば、 重たい所も対処できるはず。という目的で用意しました。
% php -i | grep -i swf /etc/php.d/swfed.ini swfed SWF Editor support => enabled SWF Editor version => 0.24 SWF Editor PNG support => yes SWF Editor GIF support => yes PWD => /home/yoya/svn/swfed/trunk/src _SERVER["PWD"] => /home/yoya/svn/swfed/trunk/src _ENV["PWD"] => /home/yoya/svn/swfed/trunk/src今までなくて、ほんと済みません。
@hnw @yoya 32bit環境でfloatをstringにキャストすると14桁で切れるみたいですね。64bit環境だと再現せず。謎だわ。当初、12桁と書いていたのですが、hnm さんから指摘を受けて、
<?php $a = array('a' => 'a', 'b' => array('b', 'c')); $b = array('a' => 'a', 'b' => array('b')); var_dump(array_diff($a, $b));残念な結果
array(0) { }
<?php function array_diff_recursive($a, $b) { $result = array(); foreach ($a as $k => $v) { if (array_key_exists($k, $b)) { if (is_array($v)) { $result[$k] = array_diff_recursive($v, $b[$k]); } else { if ($v != $b[$k]) { $result[$k] = $v; } } } else { $result[$k] = $v; } } return $result; }
<?php $a = array('a' => 'a', 'b' => array('b', 'c')); $b = array('a' => 'a', 'b' => array('b')); var_dump(array_diff($a, $b)); var_dump(array_diff_recursive($a, $b));
array(0) { } array(1) { ["b"]=> array(1) { [1]=> string(1) "c" } }
<?php function array_diff_recursive($a, $b) { $result = array(); if (is_array($a)) { foreach ($a as $k => $v) { if (isset($b[$k])) { $ret = array_diff_recursive($a[$k], $b[$k]); if (count($ret) > 0) { $result[$k] = $ret; } } else { $result[$k] = $a[$k]; } } } else { if ($a != $b) { return $a; } } return $result; }これを5分位で改良して、冒頭の array_diff_recursive が出来ました。
(Openpear の IO_Bit, IO_SWF がインストールされてる前提で) % php swfreplacepng.php saitama.swf 1 littleyoya_pink_h.png > ~/littleyoya_pink_h.swf結果 枠に収まりきらず画像の左上の方だけ表示されてますが、とりあえず成功。
pear channel-discover openpear.org pear install openpear/IO_Bit pear install openpear/IO_SWF
#3 0x00002b0dce7c9992 in swf_tag_lossless_replace_png_data (detail=0x2b0dbf46f7e0, image_id=<value optimized out>, png_data=0x11 <Address 0x11 out of bounds>, png_data_len=47338044985344, tag=0x2b0dbf470430) at /usr/local/src/swfed-0.23/src/swf_tag_lossless.c:423 #4 0x00002b0dce7bf472 in swf_tag_replace_png_data (tag=0x2b0dbf470430, image_id=50, png_data=0x2b0dcf7516e0 "\211PNG\r\n\032\n", png_data_len=289) at /usr/local/src/swfed-0.23/src/swf_tag.c:483swf_tag_lossless_replace_png_data の引数が無茶苦茶になってる。
<?php $swf_filename = $argv[1]; $swfdata = file_get_contents($swf_filename); $obj = new SWFEditor(); $obj->input($swfdata); $variables = array('yoyakey' => 'yoyavalue', 'foo' => 'goo'); $obj->setActionVariables($variables); echo $obj->output();
[00c] 45 DOACTION ( 9 bytes) action: Push String:"yoyakey" ( 11 bytes) action: Push String:"yoyavalue" ( 0 bytes) action: SetVariable ( 5 bytes) action: Push String:"foo" ( 5 bytes) action: Push String:"goo" ( 0 bytes) action: SetVariable ( 0 bytes) action: End