웹에서 사용할 수 있는 문자열로 변환해줍니다.
아래의 1번 예제는
1. 유저의 이미지를 불러와 Bitmap.draw() 로 찍은 후에
2. JPEncoder 를 통해서 ByteArray로 인코딩을 합니다.
3. 이렇게 인코딩된 ByteArray를 텍스트로 변환합니다.
4. 텍스트를 클립보드로 복사합니다. (ctrl + c)
2번 예제는
1. 입력된(ctrl + v ) 텍스트를 읽어와서
2. ByteArray로 다시 변환합니다.
3. 이렇게 변환된 ByteArray를 다시 Loader를 이용해서 이미지로 로드해옵니다.
1) Binary -> Text
2) Text -> Binary
사용법은 간단합니다.
ByteArray를 텍스트로 변환하려면
|
텍스트를 ByteArray로 다시 변환하려면
|
이렇게 사용하면 됩니당.
에러가 간혹 있을 수도 있습니다. 에러같은거 보이시면 바로 댓글 ㄱㄱ
데이터의 증감률은 테스트해보니 아래처럼 나왔습니다.
13,624 byte 가 17,313(34,626 byte)의 문자로 변환 약 254% 증가.
10,862 byte 가 13,293(26,586 byte)의 문자열로 변환 약 248% 증가.
대략 2.5배 정도 용량이 늘어나더군요.
64개의 문자를 가지고 6 bit 단위로 치환하는 방식이기 때문에 모두 웹에서 표현할 수 있는 문자열입니다.
그리고 Preset 도 지정할 수 있어서 활용하기 좋을거 같습니다.
잇힝~
p.s) XML에 이미지가 들어가는 티스토리의 백업기능을 보고 흉내내봤습니다.
'ActionScript 3.0 > 내가 만든 플래시' 카테고리의 다른 글
[AS3] 드래그앤드랍으로 파일 가져오기 (is not AIR) (18) | 2010.05.14 |
---|---|
Flash API로만 만든 Cover Flow (9) | 2009.05.17 |
ByteArray를 String으로 변환해서 써보자. (29) | 2009.04.03 |
[AS3] 이런 맛에 개발하는게 아닐까요? (19) | 2009.02.25 |
[AS3] 우야꼬와 채팅을~ / Talk with Wooyaggo (16) | 2008.09.20 |
[AS3] Away3D 예제. (7) | 2008.09.17 |
-
-
-
알 수 없는 사용자 2009.04.03 14:37
오옷...정말 멋지네요...
잘보고 갑니다...
with okgosu (-..-)a
ps. 위에 검쉰님 방가~ -
-
-
-
-
lovedev 2009.04.07 19:04
난 Flash flatform에서 모든 데이터의 입출력은 ByteArray로 하고 싶은 1人 인데 ^^
우야꼬가 한번 해봥~ :)
멋지다! 근데 짤방이 없어? -
-
andwhy 2009.05.12 17:27
오옷...안와본 사이에 신기한글들이 늘었구나~~~
저거 비트맵데이터 말고도 다 사용할수 있는거네...+_+ 딱히 어따쓸수있을지는 모르겠지만...
잘생각해보면 쓸수 있는게 많을것같다~~~+_+
근데 비트맵데이터 보니까 예전에 알바할때..어떤 외국분이...(flash8시절..) 이미지를 픽셀단위로 색상정보를 '0xff00ff'식으로 텍스트를 쫘라락 만들어서 서버에 올려놓게 만든소스가 생각난다;;;ㄷㄷㄷ
한 30*30 이미지였나??작은거였는데 서버데이터 용량이 4M이상이였던거 같은...;;; -
-
지돌스타 2010.04.23 12:34
이게 범용적으로도 사용할 수 있군.
var a:String = "안녕하세요. 1234 ABCD 看样子他不会回来了。";
var byte:ByteArray = new ByteArray;
byte.writeUTFBytes(a);
var s:String = StringSerializer.serialize(byte,true);
trace( s );
byte = StringSerializer.unserialize(s,true);
trace( byte.readUTFBytes( byte.length ) );
결과
z5cAe38hg4vKif3W2a5Qio3KEW3KBazC1Z6=Lczee8GcE=35+fvB1yvHyG3PUaWPCw5PqoWHDMWBlR5P-rW3V1sEi=fEV
안녕하세요. 1234 ABCD 看样子他不会回来了。
27byte가 93byte가 된다. 하지만 String은 아무 쓸데없지...
대신 이런건 어떨까?
var id1:int = 1234;
var id2:int = 9441991;
var pos1:Number = 216.73013333;
var pos2:Number = -83.66788611;
var mag:Number = 4.31;
var byte:ByteArray = new ByteArray;
byte.writeInt(id1);
byte.writeInt(id2);
byte.writeDouble(pos1);
byte.writeDouble(pos2);
byte.writeDouble(mag);
var s:String = StringSerializer.serialize(byte,true);
trace( s );
byte = StringSerializer.unserialize(s,true);
id1 = byte.readInt();
id2 = byte.readInt();
pos1 = byte.readDouble();
pos2 = byte.readDouble();
mag = byte.readDouble();
trace( id1, id2, pos1, pos2, mag );
결과
z5cRwngzO0hee-_rhyMfxN-Xhi1lzTWIDobwL9=31D+Yf-IKQVZDEhHNV
1234 9441991 216.73013333 -83.66788611 4.31
전체 32byte가 57byte가 되는군
xml이나 db에 바로 넣게되는데 String만큼 쉬운것도 없긴 한데...
크기가 커진다는 부담감이 없지않아 있네...
뭔가 ByteArray값을 저장하는데 있어서 위와 같은 형태 말고 다른 방법이 없을까? -
지돌스타 2010.04.23 14:55
아래 코드로 하면 1byte단위로 데이타를 String으로 변경할 수 있기 때문에 기본적으로 용량차이는 전혀 나지 않을듯..
class Sbyte{
static private var base:uint = 128;
static private var encode:String = '!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij';
/**
* ByteArray값을 String으로 변경
* @param $byte
* @return
*/
static public function byteToString( $byte:ByteArray ):String{
var result:String, i:uint, j:uint, position:int;
position = $byte.position;
$byte.position = 0;
result = '';
for( i = 0, j = $byte.length; i < j ; ++i ){
result += encode.charAt( $byte.readByte() + base );
}
$byte.position = position;
return result;
}
/**
* String값을 ByteArray값으로 변경
* @param $String
* @return
*/
static public function stringToByte( $String:String ):ByteArray{
var result:ByteArray, i:uint, j:uint;
result = new ByteArray;
for( i = 0, j = $String.length; i < j ; ++i ){
result.writeByte( encode.indexOf( $String.charAt( i ) ) - base );
}
result.position = 0;
return result;
}
}
아래처럼 사용하면 안됨
trace( Sbytes.byteToString( Sbyte.stringToByte( “안녕하세요. 지돌스타입니다.” )) ); //bbbbb.bbbbbbbb.
trace( Sbytes.byteToString( Sbyte.stringToByte( “Hello World!” )) ); //HellobWorld!
반드시 ByteArray로 사용하면 잘된다. ^^
출처 : http://www.diebuster.com/?p=1149 -