Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.06.2008, 10:41
winsent вне форума Посмотреть профиль Отправить личное сообщение для winsent Найти все сообщения от winsent
  № 1  
Ответить с цитированием
winsent

Регистрация: Oct 2005
Сообщений: 8
Question сохраняем в растр (PNGEncoder)

Задача: загрузить картинку на ней нарисовать что либо и сохранить в растр.
Решение:
На форме есть 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.
Старый 19.06.2008, 10:55
flash33 вне форума Посмотреть профиль Отправить личное сообщение для flash33 Найти все сообщения от flash33
  № 2  
Ответить с цитированием
flash33
 
Аватар для flash33

Регистрация: Nov 2005
Сообщений: 1,155
У вас addChild сразу после метода load, а надо по событию COMPLETE/INIT
PS То есть растр то вы увидите, но обработчик энкодера будет брать пустой битмап


Последний раз редактировалось flash33; 19.06.2008 в 10:59.
Старый 19.06.2008, 11:15
winsent вне форума Посмотреть профиль Отправить личное сообщение для winsent Найти все сообщения от winsent
  № 3  
Ответить с цитированием
winsent

Регистрация: 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. Причина: очепятка
Старый 19.06.2008, 12:25
winsent вне форума Посмотреть профиль Отправить личное сообщение для winsent Найти все сообщения от winsent
  № 4  
Ответить с цитированием
winsent

Регистрация: Oct 2005
Сообщений: 8
Т.е. Насколько я понимаю суть не в моменте аплоада.

Старый 19.06.2008, 12:36
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
не хватает: loader.dataFormat = URLLoaderDataFormat.BINARY; (для отсылки)
И использовать URLLoader вместо navigateToURL
__________________
Hell is the possibility of sanity

Старый 19.06.2008, 15:57
winsent вне форума Посмотреть профиль Отправить личное сообщение для winsent Найти все сообщения от winsent
  № 6  
Ответить с цитированием
winsent

Регистрация: 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.
Старый 19.06.2008, 16:33
winsent вне форума Посмотреть профиль Отправить личное сообщение для winsent Найти все сообщения от winsent
  № 7  
Ответить с цитированием
winsent

Регистрация: Oct 2005
Сообщений: 8
Ой, необходимо добавить request.contentType = "application/octet-stream";

Старый 19.06.2008, 16:37
flash33 вне форума Посмотреть профиль Отправить личное сообщение для flash33 Найти все сообщения от flash33
  № 8  
Ответить с цитированием
flash33
 
Аватар для flash33

Регистрация: Nov 2005
Сообщений: 1,155
Очень трудно гадать на кофейеой гуще, что у вас там в php находится... Вообще я это делаю так - перекодирую байтаррей в Base64 строку, запихиваю это в request.variables, на стороне сервака опять перекодирую строку в бинарный код и пишу в файл. Как делаете вы - одному Богу известно

Старый 19.06.2008, 16:38
winsent вне форума Посмотреть профиль Отправить личное сообщение для winsent Найти все сообщения от winsent
  № 9  
Ответить с цитированием
winsent

Регистрация: Oct 2005
Сообщений: 8
Ой, необходимо добавить
Код:
request.contentType = "application/octet-stream";

Старый 19.06.2008, 16:56
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
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, время: 11:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
pngencoder

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:07.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.