| 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: 15 let
|
|||
0
).