리자

플래시의 화면을 PHP의 GD라이브러리를 이용하여 JPG로 출력

Flash-DB에서 FLV파일의 재생중에 일정화면을 캡쳐하여 필터로 블러효과나 쉐도우효과를 주는 예제를 보고 간단하게 만들어 봤습니다. 그냥 화상캠에서 화면을 보고 찍고 이를 PHP의 GD라이브러리를 이용하여 JPG로 출력하는것..


그냥 예제로서 봐주세욤..ㅋㅋ 테스트를 너무 많이 하시면 서버부하를 너무 주어 호스팅사로부터 전화옵니다.. ㅠㅠ; 되도록 자신의 계정에서 테스트 하시길..


(화상카메라가 있어야 합니다.)

간단한 테스트를 위하여 다음의 URL을 클릭하여 테스트해보시길 바랍니다.
http://www.nooree.com/cam (PHP의 GD라이브러리를 이용하므로 조금 기다리십시오)
먼저 첨부파일의 cam_app.fla파일을 열어 내용을 살펴봅니다. 간단하게 스테이지에는 output_vid 무비클립과 버튼 1개 만 존재합니다. output_vid를 더블클릭하여 무비클립 편집모드로 들어가면 my_video라는 인스턴스명을 가진 외부비디오 무비클립이 존재하며, 첫번째 타임라인에는 다음과 같은 액션이 기술되어 있어 자동으로 화상캠 카메라의 영상을 가져옵니다.
stop();
// 카메라 생성
myCam = Camera.get();
// 적용
this.my_video.attachVideo(myCam);


스테이지로 다시 돌아오면, 역시 첫번째 타임라인에 다음과 같은 액션이 기술되어 있습니다.

Stage.scaleMode = "noScale";
Stage.align="CM";
stop();
//내장 필터임포트
import flash.display.BitmapData;
import flash.filters.*;
import flash.geom.Matrix;
      
//찍기
function makePic() { capture(0) }
pic_btn.onPress = mx.utils.Delegate.create(this,makePic);

//캡쳐하기
function capture(nr){
this["snapshot"+nr] = new BitmapData(output_vid._width,output_vid._height);
this["snapshot"+nr].draw(output_vid,new Matrix());
var t:MovieClip = createEmptyMovieClip("pictured_mc"+nr,nr);
t._x = 345; t._y = 20; //찍은 화면의 출력위치
t._xscale = t._yscale = 50 //새 무비클립의 사이즈를 50%줄여주기
t.attachBitmap(this["snapshot"+nr],1);
attachMovie("print_but", "bot"+nr, 100+nr, {_x:345, _y:165});
}
// PHP로 넘겨줄 비트맵 데이터 출력하기
function output(nr){
 var pixels:Array = new Array()
 var snap = new BitmapData(this["snapshot"+nr].width, this["snapshot"+nr].height);
 var myMatrix = new Matrix();
 myMatrix.scale(0.5, 0.5); //PHP에서 출력될 이미지의 사이즈
 snap.draw(this["snapshot"+nr],  myMatrix);
 var w:Number = snap.width, tmp
 var h:Number = snap.height
 for(var a=0; a<=w; a++){
  for(var b=0; b<=h; b++){
   tmp = snap.getPixel32(a, b).toString(16)
   pixels.push(tmp.substr(1))
  }
 }
//PHP에 데이터 넘겨주기
 var output:LoadVars = new LoadVars()
 output.img = pixels.toString()
 output.height = h
 output.width = w
//PHP의 경로지정
 output.send("show.php", "output", "POST")  
}


SWF파일을 퍼블리싱하고, SWF가 포함된 index.php파일과 show.php파일을 PHP가 구동되는 서버에 업로드 합니다. show.php파일의 내용은 다음과 같습니다.


<?
if(!function_exists("imagecreate")) die("GD라이브러리를 설치해야 합니다.");
//Capture Post data
$data = explode(",", $_POST['img']);
$width = $_POST['width'];
$height = $_POST['height'];

//Allocate image
$image=(function_exists("imagecreatetruecolor"))?imagecreatetruecolor( $width ,$height ):imagecreate( $width ,$height );
$background = imagecolorallocate( $image ,0 , 0 , 0 );

//Copy pixels
$i = 0;
for($x=0; $x<=$width; $x++){
 for($y=0; $y<=$height; $y++){
  $r = 255-hexdec("0X".substr( $data[$i] , 0 , 2 ));
  $g = 255-hexdec("0x".substr( $data[$i] , 2 , 2 ));
  $b = 255-hexdec("0x".substr( $data[$i++] , 4 , 2 ));
  $color =  ($r << 16) | ($g << 8) | $b;
  imagesetpixel ( $image , $x , $y , $color );
 }
}

//Output image and clean
header( "Content-type: image/jpeg" );
ImageJPEG( $image );
imagedestroy( $image );
?>

간단한 예제이지만, 유용한 소스가 될 수 있을 것입니다. 예를 들어 회원가입시에 사진을 업로드 해야하는 경우 이미 찍어 놓은 JPG파일이 없는 경우 가입 시 화상캠으로 바로 찍어 업로드 하는 어플리케이션을 만들때나, 미니홈피 같은 곳에서 사진 바로 찍어 올리기 같은 기능을 만들때 유용할 듯 합니다.



takeone :  Tinciell Capture에서 활용할수 있을듯, 로컬프로그램이 플래시의 정보를 받아서 출력

              예전에 테스트했을때는 이미지가 이상하게 저장되는 부분이 있었는데 확인해봐야 할듯
[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]
|

댓글 2개

(화상카메라가 있어야 합니다.)
....
특이하네요..
액션쪽에서 처리하는 것을 봤는데..
php로도 가능한가 보네요.. ㅎㅎ
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
17년 전 조회 3,544
17년 전 조회 2,723
17년 전 조회 3,085
17년 전 조회 2,776
17년 전 조회 2,104
17년 전 조회 3,459
17년 전 조회 2,792
17년 전 조회 3,671
17년 전 조회 1,284
17년 전 조회 2,403
17년 전 조회 1,470
17년 전 조회 1,332
17년 전 조회 1,212
17년 전 조회 1,196
17년 전 조회 1,573
17년 전 조회 3,018
17년 전 조회 3,397
17년 전 조회 3,157
17년 전 조회 2,039
17년 전 조회 4,149
17년 전 조회 1,555
17년 전 조회 1,275
17년 전 조회 1,387
17년 전 조회 1,263
17년 전 조회 1,501
17년 전 조회 1,882
17년 전 조회 2,487
17년 전 조회 2,564
17년 전 조회 1,567
17년 전 조회 1,314
17년 전 조회 2,581
17년 전 조회 3,011
17년 전 조회 3,379
17년 전 조회 3,329
17년 전 조회 2,483
17년 전 조회 3,908
17년 전 조회 3,333
17년 전 조회 5,648
17년 전 조회 2,804
17년 전 조회 2,012
17년 전 조회 2,088
17년 전 조회 1,926
17년 전 조회 1,864
17년 전 조회 2,919
17년 전 조회 2,045
17년 전 조회 1,721
17년 전 조회 2,220
17년 전 조회 1,266
17년 전 조회 1,819
17년 전 조회 3,035
17년 전 조회 2,272
17년 전 조회 1,949
17년 전 조회 2,178
17년 전 조회 1,472
17년 전 조회 1,862
17년 전 조회 1,365
17년 전 조회 1,921
17년 전 조회 1,938
17년 전 조회 1,193
17년 전 조회 3,295
17년 전 조회 4,460
17년 전 조회 2,613
17년 전 조회 7,618
17년 전 조회 3,978
17년 전 조회 4,302
17년 전 조회 2,567
17년 전 조회 3,049
17년 전 조회 3,792
17년 전 조회 4,136
17년 전 조회 3,309
17년 전 조회 3,289
17년 전 조회 3,448
17년 전 조회 2,622
17년 전 조회 2,211
17년 전 조회 3,248
17년 전 조회 3,412
17년 전 조회 4,752
17년 전 조회 1,725
17년 전 조회 2,762
17년 전 조회 2,832
17년 전 조회 2,049
17년 전 조회 2,353
17년 전 조회 1,987
17년 전 조회 2,526
17년 전 조회 3,926
17년 전 조회 4,029
17년 전 조회 2,232
17년 전 조회 1,483
17년 전 조회 1,617
17년 전 조회 1,775
17년 전 조회 1,752
17년 전 조회 1,511
17년 전 조회 1,656
17년 전 조회 1,463
17년 전 조회 1,968
17년 전 조회 2,888
17년 전 조회 1,976
17년 전 조회 1,523
17년 전 조회 1,820
17년 전 조회 2,470