#php #actionscript-3 #jpeg
#php #actionscript-3 #jpeg
Вопрос:
привет, я хочу, чтобы тест заработал. внедрение 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 );
}
?>
Ответ №1:
Мне нравится использовать AMFPHP для обработки подобных ситуаций. Ознакомьтесь с разделом удаленного взаимодействия на главной странице Josh Strikes здесь. Просто вставьте ByteArray в другой массив, содержащий любые другие данные, которые вам нужны для его идентификации, или просто отправьте его самостоятельно. Таким образом, вы можете либо декодировать его и сохранить в папку, либо просто поместить ByteArray в базу данных для последующего использования. Как указано выше, вы должны сначала обязательно закодировать ByteArray.
Ответ №2:
Возможно, вам потребуется закодировать ByteArray в Base64 перед его публикацией, а затем декодировать его на стороне сервера с помощью PHP. Но вы на самом деле не говорите, что именно не работает…
Ответ №3:
Вам не хватает преобразования изображений из BitmapData в BitMap в Image
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();
}
Взгляните на эту ссылку, она объяснит все, что вам нужно
Комментарии:
1. очень сожалею, если я выражаюсь расплывчато, но все это очень полезно. кажется, я устранил проблему, однако, когда я отправляю массив байтов php-скрипту, я не хочу, чтобы он переходил на новую страницу из-за характера фрагмента, вот мой код в его нынешнем виде….
2. <?php date_default_timezone_set(‘UTC’); if (isset($GLOBALS[«HTTP_RAW_POST_DATA»])) { // получить bytearray $ jpg = $GLOBALS[«HTTP_RAW_POST_DATA»]; $filename = date(‘l jS of F Y h: i: s A’); $ handler = открыть($filename. «.jpg», ‘w’); fwrite($handler, $jpg); fclose($handler); } ?>
3. var jpgSource:BitmapData = новые BitmapData (stage.stageWidth, stage.stageHeight); jpgSource.draw(stage); var jpgEncoder:JPGEncoder = новый JPGEncoder(85); var jpgStream:ByteArray = jpgEncoder.encode(jpgSource); var header:URLRequestHeader = новый URLRequestHeader(» Content-type», «application/octet-stream»); var jpgURLRequest:URLRequest = новый URLRequest(«jpg_encoder_download.php?name=sketch.jpg «); jpgURLRequest.requestHeaders.push (заголовок); jpgURLRequest.method = URLRequestMethod. POST; jpgURLRequest. data = jpgStream; navigateToURL(jpgURLRequest);
4. Попробуйте отредактировать свой исходный пост и поместить этот код туда, чтобы он был читабельным
5. Я добавил ссылку, которая поможет вам в конце моего поста