этап as3 к jpg байтовому массиву к проблемам php стороны сервера - PullRequest
1 голос
/ 05 апреля 2011

Привет, я ищу тестовый рабочий.встраивание SWF-файла, который отправляет JPEG сцены в PHP-сценарий, который сохраняет на моем сервере.Я в глубокой воде и не могу заставить работать следующее ...

// ----------------------------AS3

import com.adobe.images.JPGEncoder;
import flash.events.MouseEvent;
import flash.display.Sprite;

var dot:Sprite = new Sprite()
dot.graphics.beginFill(1)
dot.graphics.drawCircle(550/2,400/2,40)
addChild(dot)

stage.addEventListener(MouseEvent.MOUSE_DOWN, saveJPG)

function saveJPG():void{


    var jpgSource:BitmapData = new BitmapData (stage.stageWidth, stage.stageHeight);
    jpgSource.draw(stage);

    var jpgEncoder:JPGEncoder = new JPGEncoder(85);
    var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);

    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
    var jpgURLRequest:URLRequest = new URLRequest("jpg_encoder_download.php?name=sketch.jpg");
    jpgURLRequest.requestHeaders.push(header);
    jpgURLRequest.method = URLRequestMethod.POST;
    jpgURLRequest.data = jpgStream;
    navigateToURL(jpgURLRequest, "_blank");

}

// ----------------------- php

<?php


if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
    // get bytearray
    $jpg = $GLOBALS["HTTP_RAW_POST_DATA"];

    imagejpeg( $jpg , "yes.jpg", 100  );
}

?>

Ответы [ 3 ]

1 голос
/ 07 июня 2012

Мне нравится использовать AMFPHP для обработки подобных ситуаций.Проверьте раздел удаленного взаимодействия главной страницы Josh Strikes здесь .Просто вложите ByteArray в другой массив, содержащий любые другие данные, которые вам нужны для его идентификации, или просто отправьте их самиТаким образом, вы можете либо декодировать его и сохранить в папке, либо просто вставить ByteArray в базу данных для последующего использования.Как указано выше, вы должны сначала кодировать ByteArray.

0 голосов
/ 05 апреля 2011

Вам не хватает преобразований изображений из BitMapData в BitMap в изображение

function createJPG():void{
  var finished1:BitmapData = new BitmapData ( stage.stageWidth, stage.stageHeight, true, 0xffffffff );
  finished1.draw( stage );

  // the key part you are missing
  var myImage:Image = new Image();
  myImage.load( new Bitmap(finished1) );
  myImage.content.width = stage.stageWidth;
  myImage.content.height = stage.stageHeight;

  var finished:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xffffffff );
  finished.draw(myImage); 
  myImage = null;


  // encode the finished image so we can send the data to the server
  var encoder:JPEGEncoder = new JPEGEncoder();
  var data:ByteArray = encoder.encode(finished);
  var b64:Base64Encoder = new Base64Encoder()
  b64.encodeBytes( data )
return b64.toString();
}

Посмотрите на эту ссылку , она объяснит все, что вам нужно

0 голосов
/ 05 апреля 2011

Вам может понадобиться кодировать byteArray в Base64 перед отправкой, а затем декодировать его на стороне сервера с помощью PHP. Но вы не говорите, что именно не работает ...

...