2009-06-08 6 views
0

이미지를 Flash로로드하고 JPGEncoder를 사용하여 이미지를 ByteArray로 인코딩 한 다음 bytearray를 파일에 쓰는 AMF PHP로 보냅니다. 이 모든 것이 제대로 작동하는 것으로 보입니다. 결과 파일을 Photoshop CS4에서 다운로드해도됩니다. 내가 바탕 화면에서 그것을 열거 나 다시 Flash에서 그것을 나던 작업을 열려고하면 ... Picasa가 내 기본 이미지 브라우저가 말한다 "잘못된"여기 왜 JPGEncoded bytearray가 AS3에서 AMFPHP로 전송되어 유효하지 않은 이미지가 생성됩니까?

내가 파일로 된 ByteArray를 작성하는 데 사용하는 코드는 -

$ jpg = $ GLOBALS [ "HTTP_RAW_POST_DATA"]; file_put_contents ($ filename, $ jpg);

그게 ... NetConnection 클래스를 사용하여 서비스에 연결하고 전화를 걸면 jpg 데이터를 보내야합니까? JPGEncoder가이를 처리했다고 가정했습니다. 파일을 작성하기 전에 bytearray의 유효성을 검사하려면 어떻게해야합니까? MIME 형식 등을 설정해야합니까?

item.load(); 
function _onImageDataLoaded(evt:Event):void { 
    var tmpFileRef:FileReference=FileReference(evt.target); 
    image_loader=new Loader ; 
    image_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onImageLoaded); 
    image_loader.loadBytes(tmpFileRef.data); 
} 
function _onImageLoaded(evt:Event):void { 
bitmap=Bitmap(evt.target.content); 
bitmap.smoothing=true; 
if (bitmap.width>MAX_WIDTH||bitmap.height>MAX_HEIGHT) { 
    resizeBitmap(bitmap); 
} 
    uploadResizedImage(bitmap); 
} 
function resizeBitmap(target:Bitmap):void { 
    if (target.height>target.width) { 
     target.width=MAX_WIDTH; 
     target.scaleY=target.scaleX; 
    } else if (target.width >= target.height) { 
     target.height=MAX_HEIGHT; 
     target.scaleX=target.scaleY; 
    } 

} 
function uploadResizedImage(target:Bitmap):void { 
    var _bmd:BitmapData=new BitmapData(target.width,target.height); 
    _bmd.draw(target, new Matrix(target.scaleX, 0, 0, target.scaleY)); 
    var encoded_jpg:JPGEncoder=new JPGEncoder(90); 
    var jpg_binary:ByteArray=encoded_jpg.encode(_bmd); 
    _uploadService=new NetConnection(); 
    _uploadService.objectEncoding=ObjectEncoding.AMF3 
    _uploadService.connect("http://.../amfphp/gateway.php"); 
    _uploadService.call("UploadService.receiveByteArray",new Responder(success, error), jpg_binary, currentImageFilename); 

} 
+0

내가 얻을 couldnt한다 : AMFPHP에서 POST 데이터는 그래서 당신은 당신의 AMFPHP UploadService 스크립트에 필요한 _uploadService.call가와 currentImageFilename--이 같은 --jpg_binary 당신의 두 개의 입력 인수를 받아들이는 기능이며, 추상화한다 이 일을 !! :(... 그래서 지금은 아무런 문제없이 파일을 쓰는 일반 오래된 PHP 페이지로 이미지를 보내고 있습니다 :) – undefined

답변

1

당신의 문제가 당신의 PHP 서비스에 : -

덕분에 여기에 몇 가지 코드입니다.

<?php 
class UploadService { 

    function receiveByteArray($ba, $filename) { 

      $result = file_put_contents($filename, $ba->data); 
      if ($result == FALSE) { 
       trigger_error("File save failed"); 
      } 
    } 
} 
?> 
관련 문제