Autor | Zpráva | ||
---|---|---|---|
sml Profil * |
Dobry den, chtel bych se zeptat, jak pomoci PHP ulozit obrazek z Flash Builderu 4.
Mam takovy to kod (FB4): var picture:BitmapData = new BitmapData(theCam.width, theCam.height); picture.draw(theCam); var jPEGEncoder:JPEGEncoder = new JPEGEncoder(500); var imageSnapshot:ImageSnapshot = ImageSnapshot.captureImage(theCam, 0, jPEGEncoder); var obr:String = ImageSnapshot.encodeImageAsBase64(imageSnapshot); var encodedData:String = obr; var handleService:HTTPService = new HTTPService(); handleService.url = "/saveFile.php" handleService.method = "POST"; handleService.showBusyCursor = true; handleService.send({content: encodedData}); A soubor na ukladani (PHP): <?php $file_data = $_POST['content']; $img_data = base64_decode($file_data); $img_filename = "example_name.jpg"; $fp = fopen ($img_filename, "w"); fwrite ($fp, $img_data); fclose ($fp); ?> Chyby mi to zadne nehlasi, avsak kod nefunguje, nic se nedeje. Mohl by mi nekdo poradit co s tim? Dekuji. Moderátor Alphard: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na
![]() |
||
Alphard Profil |
#2 · Zasláno: 7. 6. 2011, 01:11:31 · Upravil/a: Alphard
PHP část lze zkrátit, ale chybu v tom nevidím.
<?php file_put_contents('example_name.jpg', base64_decode($_POST['content'])); Pro testování, jaká data script přijme (předpokládám, že jinak to nevidíte) lze použít <?php file_put_contents(time().'.log', print_r($_POST, true)); Flash neznám. Doplnil jsem počáteční <?php, aby nedošlo ke zmatení. |
||
sml Profil * |
#3 · Zasláno: 7. 6. 2011, 01:25:24
Dekuji za radu. Zatim to ale vypada, ze chyba bude nekde ve Flashovem kodu, protoze pri pouziti
file_put_contents(time().'.log', print_r($_POST, true)); se zadny log nevytvori, tedy php skript se vubec nepusti. |
||
Alphard Profil |
#4 · Zasláno: 7. 6. 2011, 01:47:19
[#3] sml
Omlouvám se, jestli jsem vás zmátl, ale <?php musí zůstat, v PHP kategorii to beru jako samozřejmost, ale tady to radši zdůrazním :-). Svůj původní příspěvek jsem upravil. |
||
:D Profil * |
#5 · Zasláno: 8. 6. 2011, 15:42:12
Je třída JPEGEncoder od Adobe? A opravdu JPEGEncoder požaduje kvalitu obrázku 500%?
|
||
weroro Profil |
#6 · Zasláno: 9. 6. 2011, 14:49:01
:D:
JPEGEncoder je zrejme nejaká trieda (súdim podla toho ako je vytvorený samotný objekt). Tá 500 je tam ale skutočne divná a logicky to môže byť len kvalita, aj keď nie je vylúčené, že sa jedná o iný parameter. |
||
:D Profil * |
#7 · Zasláno: 9. 6. 2011, 15:56:22
weroro:
Na třídu JPEGEncoder jsem se ptal jest-li je od Adobe, protože mi připadá, že dotyčný to dělá podle tohoto článku http://www.adobe.com/devnet/flash/articles/saving_flash_graphics.html kde je tato třída použita a mohlo by to signalizovat onen problém. Jinak to jsem to dělal takto: AS Main.as package { import com.Snapshot; import fl.controls.Button; import fl.controls.TextInput; import flash.display.Bitmap; import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite { private var container:Sprite; private var textInput:TextInput; private var buttonCapture:Button; public function Main() { container = new Sprite(); container.x = 20; container.y = 20; this.addChild(container); textInput = new TextInput(); textInput.setSize((this.stage.stageWidth / 2) - 40, this.stage.stageHeight - 60); container.addChild(textInput); buttonCapture = new Button(); buttonCapture.label = "zachytit obraz"; buttonCapture.x = (this.stage.stageWidth - buttonCapture.width) / 2; buttonCapture.y = this.stage.stageHeight - 30; this.addChild(buttonCapture); buttonCapture.addEventListener(MouseEvent.CLICK, onCapture); } private function onCapture(thisEvtent:MouseEvent):void { Snapshot.capture(textInput); var bitmap:Bitmap = Snapshot.copy; bitmap.x = (this.stage.stageWidth / 2) + 20; bitmap.y = 20; this.addChild(bitmap); } } } Snapshot.as package com { import com.adobe.images.JPGEncoder; import com.util.Base64; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.events.Event; import flash.events.IOErrorEvent; import flash.geom.Rectangle; import flash.net.navigateToURL; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLVariables; import flash.utils.ByteArray; public class Snapshot { public static var copy:Bitmap; public function Snapshot() { //... } public static function capture(target:DisplayObject):void { var rectangle:Rectangle = target.getBounds(target.parent); var bitmapData:BitmapData = new BitmapData(rectangle.width + 2, rectangle.height + 2); bitmapData.draw(target.parent); copy = new Bitmap(bitmapData); var byteArray:ByteArray; // encode as JPG var jpgEncoder:JPGEncoder = new JPGEncoder(80); byteArray = jpgEncoder.encode(bitmapData); var byteArrayAsString:String = Base64.encodeByteArray(byteArray); var url:String = "saveImage.php" + '?' + Math.random(); var fileName:String = "img001.jpg" var urlRequest:URLRequest = new URLRequest(url); urlRequest.method = URLRequestMethod.POST; var urlVariables:URLVariables = new URLVariables(); urlVariables.fileName = fileName; urlVariables.image = byteArrayAsString; urlRequest.data = urlVariables; var urlLoader:URLLoader = new URLLoader(); urlLoader.load(urlRequest); } } } Třídy JPGEncoder a Base64 používám z uvedeného článku. PHP: <?php // vytvori promennou fileName, ktera obsahuje nazev obrazku (zaslanou Flashem pomoci metody POST) $fileName = $_POST['fileName']; // prevede retezec, ktery je zakodovan pomoci base64 na do puvodniho tvaru (v tomto pripade je to obrazek JPG) $image = base64_decode($_POST["image"]); // uklada soubor na server file_put_contents($fileName, $image); // vraci obrazk zpet Flashi echo $image; ?> |
||
Časová prodleva: 14 let
|
0