![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2005
Сообщений: 8
|
Задача: загрузить картинку на ней нарисовать что либо и сохранить в растр.
Решение: На форме есть MovieClip clip_mc рисование на нем реализованно так: var child:Shape = new Shape();
clip_mc.addChild(child);
//
clip_mc.addEventListener(MouseEvent.MOUSE_DOWN, onMousedown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseup);
function onMousedown(event:MouseEvent):void {
var to_x = event.localX;
var to_y = event.localY;
child.graphics.lineStyle(10, 000000, 100, true, "normal", "");
child.graphics.moveTo(to_x,to_y);
clip_mc.addEventListener(Event.ENTER_FRAME, enterFrameW);
}
function onMouseup(event:MouseEvent):void {
clip_mc.removeEventListener("enterFrame", enterFrameW);
}
function enterFrameW(event:Event):void {
var m_x:Number = clip_mc.mouseX;
var m_y:Number = clip_mc.mouseY;
if ((m_x>2 && m_x<483) && (m_y>1 && m_y<275)) {
child.graphics.lineTo(clip_mc.mouseX, clip_mc.mouseY);
}
}
//Сохранение в растр используя PNGEncoder www.kaourantin.net
var bmp:BitmapData = new BitmapData(clip_mc.width,clip_mc.height,true,"0x000000");
bmp.draw(clip_mc);
var imagedata:ByteArray = PNGEncoder.encode(bmp);
// Далее результат отдаем php скрипту который складывает картинку
Проблемма как загрузить растр в clip_mc? var loader:Loader = new Loader(); var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg"); loader.load(url); clip_mc.addChild(loader); // <----- РАБОТАТЬ НЕ БУДЕТ, точнее будет но PNGEncoder не отработает Последний раз редактировалось winsent; 19.06.2008 в 10:43. |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
У вас addChild сразу после метода load, а надо по событию COMPLETE/INIT
PS То есть растр то вы увидите, но обработчик энкодера будет брать пустой битмап Последний раз редактировалось flash33; 19.06.2008 в 10:59. |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 8
|
Упростил. Ситуация выглядит так: Без строки clip_mc.addChild(loader); все работает (смотрю в логаАпача вызывается Send.php). Как только добавляю, в логах тишина (Send.php - не вызывается ). Т.е. не то чтобы берется пустой битмам, а вообще не отрабатывает.
import flash.display.*;
import flash.net.URLRequest;
import flash.net.URLVariables;
var loader:Loader = new Loader();
var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg");
loader.load(url);
clip_mc.addChild(loader);// МЕТКА (без этой строки работает)
function sendImage(event:Event) {
var bmp:BitmapData = new BitmapData(clip_mc.width,clip_mc.height);
bmp.draw(clip_mc);
var png_image:ByteArray = PNGEncoder.encode(bmp);
trace(png_image.length);
var url_req:URLRequest = new URLRequest("http://serv/send.php");
url_req.data = png_image;
url_req.method = URLRequestMethod.POST;
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
url_req.requestHeaders.push(header);
navigateToURL(url_req, "_self");
}
send_mc.addEventListener(MouseEvent.CLICK, sendImage); //Обработчик кнопки
Последний раз редактировалось winsent; 19.06.2008 в 12:23. Причина: очепятка |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 8
|
Т.е. Насколько я понимаю суть не в моменте аплоада.
|
|
|||||
|
Modus ponens
|
не хватает: loader.dataFormat = URLLoaderDataFormat.BINARY; (для отсылки)
И использовать URLLoader вместо navigateToURL
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 8
|
Мда, еще упростил, теперь ситуация выглядит так, что-то прихоит к send.php, но структура нарушена и это уже соответственно не картинка.
import flash.display.*;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLLoader;
function sendImage(event:Event) {
var bmp:BitmapData = new BitmapData(clip_mc.width,clip_mc.height);
bmp.draw(clip_mc);
var png_image:ByteArray = PNGEncoder.encode(bmp);
//
var request:URLRequest = new URLRequest("http://serv/send.php");
request.data = png_image;
request.method = URLRequestMethod.POST;
var _loader:URLLoader = new URLLoader();
_loader.dataFormat = URLLoaderDataFormat.BINARY;
_loader.load(request);
}
send_mc.addEventListener(MouseEvent.CLICK, sendImage); //Обработчик кнопки
Последний раз редактировалось winsent; 19.06.2008 в 16:00. |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 8
|
Ой, необходимо добавить request.contentType = "application/octet-stream";
|
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
Очень трудно гадать на кофейеой гуще, что у вас там в php находится... Вообще я это делаю так - перекодирую байтаррей в Base64 строку, запихиваю это в request.variables, на стороне сервака опять перекодирую строку в бинарный код и пишу в файл. Как делаете вы - одному Богу известно
|
|
|||||
|
Регистрация: Oct 2005
Сообщений: 8
|
|
|
|||||
|
Modus ponens
|
flash33: Зачем? Это ж столько лишней инфы посылать?
Вот пример ПХП скрипта сохраняющего картинку (PNG) <?php
session_start();
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )){
if(isset ($_SESSION['I'])) {
$i = $_SESSION['I'] + 1;
$_SESSION['I'] = $i;
} else {
$i = $_SESSION['I'] = 1;
}
$im = $GLOBALS["HTTP_RAW_POST_DATA"];
$add = $i;
if ($add < 10) {
$add = "000" . $add;
} else if ($add >= 10 && $add < 100) {
$add = "00" . $add;
}
else if ($add >= 100 && $add < 1000) {
$add = "0" . $add;
}
$filename = "pic" . $add . ".png";
$fullFilePath = "uploads/" . $filename;
$handle = fopen($fullFilePath, "w");
fwrite($handle, $im);
fclose($handle);
echo "a=YES";
exit();
} else {
echo "a=NO";
exit();
}
?>
package phpconnect
{
/**
* ...
* @author wvxvw
*/
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.net.URLLoaderDataFormat;
import flash.net.URLLoader;
import flash.net.URLRequestHeader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.external.ExternalInterface;
import flash.utils.ByteArray;
import utilities.RenderEvent;
import utilities.PlayerGenericEvent;
import player_internal;
public class Sender extends EventDispatcher
{
use namespace player_internal;
internal var domain:String = 'save_png.php';
internal var loader:URLLoader;
internal var request:URLRequest;
internal var header:URLRequestHeader;
internal var vars1:URLVariables;
public function Sender()
{
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
request = new URLRequest(domain);
request.method = URLRequestMethod.POST;
header = new URLRequestHeader('Content-Type', 'application/octet-stream');
request.requestHeaders.push(header);
loader.addEventListener(Event.COMPLETE, handleComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, handleError);
}
player_internal function send(ba:ByteArray):void
{
request.data = ba;
loader.load(request);
}
player_internal function handleComplete(evt:Event):void
{
var rvars:URLVariables = new URLVariables(evt.target.data);
dispatchEvent(new RenderEvent(RenderEvent.RENDER, true));
}
player_internal function handleError(evt:IOErrorEvent):void
{
ExternalInterface.call('alert', 'FAILED!\r'+evt);
//dispatchEvent(new PlayerGenericEvent(EventList.GENERIC, 1));
}
}
}
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:51. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| pngencoder |
|
|