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

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

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

Регистрация: Feb 2009
Сообщений: 11
Question Редактирование изображений перед отправкой

Добрый день!
Да, эта тема один раз неявно всплывала на просторах сего замечательного ресурса, однако есть желание расставить точки над i =)

Процесс следующий:
  1. Загрузка изображений с компьютера пользователя во флешку
  2. Простое редактирование изображений, из разряда масштабирование и поворот
  3. Загрузка изображений на сервер

Вариант с "просто загрузкой" отлично решает FileReference, который в 10й версии плеера обзавелся еще и [read-only] полем data, который позволяет посмотреть визуально, что же пользователь загрузил во флешку, перед отправкой на сервер.

Как-то вот так:
Код AS3:
image.source = fileReference.data;
* Однако, вся проблема в том, что поле-то это read-only Т.е., если сделать какую-то манипуляцию с картинкой, скажем, повернуть ее - то эти изменения никак не отразить в передаваемом файле.

* Собственно, как я понимаю, поля типа filter никак не влияют непосредственно на изображение, а только изменяют представление DisplayObject'а? Тогда какой подход выбрать к изменению изображения? И к его передаче на сервер =)

Старый 11.02.2009, 18:15
Foli вне форума Посмотреть профиль Отправить личное сообщение для Foli Найти все сообщения от Foli
  № 2  
Ответить с цитированием
Foli
[+1 04.05.08]

Регистрация: May 2008
Адрес: Czech, Prague
Сообщений: 65
А что у image.source не идёт получить что в него загружено?
Например в Delphi можно украсть всё с Canvas.
Конечно это рогатенько выглядит, но, как вариант.

Старый 11.02.2009, 18:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Это ByteArray, вообще-то.

Старый 11.02.2009, 20:55
ix18 вне форума Посмотреть профиль Отправить личное сообщение для ix18 Найти все сообщения от ix18
  № 4  
Ответить с цитированием
ix18

Регистрация: Feb 2009
Сообщений: 11
Ну да, но проблема-то в том, как модифицировать изображения, подгруженные в клиент с помощью FileReference и измененную версию снова в него подсунуть, чтоб с помощью метода upload загрузить это хозяйство на сервер.
Тут я разделяю 2 концептуальных вопроса:
1. Как модифицировать изображение, имея его в массиве байтов.
2. Как модифицированное изображение "запихнуть" обратно в FileReference, чтобы отправить его.

По п.1. - есть в объекте Image, поле transform.matrix, однако, это влияет только на отображение, а не на саму картинку (т.е. последовательность байт)

По п.2. - если даже как-то изменить изображение, то непонятно, как его его загрузить в FileReference. Ведь, как уже говорилось, поле data - только на чтение.

Старый 11.02.2009, 20:56
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
data — это ссылка на ByteArray, вот его и изменяйте, как вам угодно.

Старый 11.02.2009, 22:11
Foli вне форума Посмотреть профиль Отправить личное сообщение для Foli Найти все сообщения от Foli
  № 6  
Ответить с цитированием
Foli
[+1 04.05.08]

Регистрация: May 2008
Адрес: Czech, Prague
Сообщений: 65
Цитата:
Сообщение от __etc
Это ByteArray, вообще-то.
Я не спорю.
Не довелось ещё пощупать, что и как. Но суть та же.
Получить байты и с ними работать.

Цитата:
Сообщение от ix18
Загрузка изображений на сервер.
А что на сервере?

Старый 12.02.2009, 00:23
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 7  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Код:
var fileRef:FileReference = new FileReference();
var date:Date = new Date();
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
try {
	var success:Boolean = fileRef.browse();
} catch (error:Error) {
	trace("Unable to browse for files.");
}
function selectHandler(event:Event):void {
	var request:URLRequest = new URLRequest("http://www.сайт.мой.ру/upload.php?="+date.getTime().toString());
	try {
		fileRef.upload(request);
	} catch (error:Error) {
		trace("Unable to upload file.");
	}
}
function completeHandler(event:Event):void {
	trace("uploaded");
	txt.text = "uploaded";
}
php
Код:
<?php
$MAXIMUM_FILESIZE = 1024 * 200; // 200KB
$MAXIMUM_FILE_COUNT = 10; // keep maximum 10 files on server
//echo exif_imagetype($_FILES['Filedata']);
if ($_FILES['Filedata']['size'] <= $MAXIMUM_FILESIZE)
{
	move_uploaded_file($_FILES['Filedata']['tmp_name'], "./images/".$_FILES['Filedata']['name']);
}

?>
Так же нужно создать в корневой папке сайта папку images
В эту папку будут сваливаться файлы

Не рекомендую использовать этот php скрипт, тк. он полностью губит ваш сайт
Ведь закачать можно любой файл, в том числе и php файл, нужно допилить php скрипт, что бы он принимал только файлы рисунков.

Старый 12.02.2009, 02:47
ix18 вне форума Посмотреть профиль Отправить личное сообщение для ix18 Найти все сообщения от ix18
  № 8  
Ответить с цитированием
ix18

Регистрация: Feb 2009
Сообщений: 11
Цитата:
Сообщение от Foli Посмотреть сообщение
Я не спорю.
Не довелось ещё пощупать, что и как. Но суть та же.
Получить байты и с ними работать.

А что на сервере?

Дык, круто Только 2 "но": это действительно ссылка, и в процессе дебага, действительно видно, что, скажем, применение метода clear, стирает этот массив. Но файл-то в итоге заливается! Изменения в нем - побоку. А задача именно - в изменении изображения перед отправкой. Как организовать просто отправку файла - это я знаю, спасибо =)

На сервере стоит PHP, написан скрипт, принимающий файлы, посредством POST-запроса. Но это не важно. Важно узнать как изменить изображение и отправить уже измененный экземпляр.

Alex Lexcuk, спасибо за код, но это уже давно реализовано, тема не о том

Почему-то мне кажется, что задача уже реализована не один раз... к сожалению, нигде не найти информации

Старый 12.02.2009, 08:26
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 9  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Вам же сказали про ByteArray, вот и думайте что файла не существует. Есть только ByteArray.

как сохранить bytearray flex php - это подсказанька :о))

Старый 12.02.2009, 09:53
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 10  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
>>как сохранить bytearray flex php - это подсказанька :о))
Код:
//SaveByteArrayServerDoc
package {
	import flash.display.*;
	import flash.text.*;
	import flash.net.*;
	import flash.events.*;
	import flash.utils.*;
	public class SaveByteArrayServerDoc extends Sprite {
		private var ba:ByteArray,
			fileName:String,
			request:URLRequest,
			loader: URLLoader;

		public function SaveByteArrayServerDoc():void {
			ba = new ByteArray();
			fileName = "text-file.txt";
			request = new URLRequest(
			"http://localhost/CONTENT_PATH/save-file.php?name="+fileName+"&d="+new Date().getTime());

			ba.writeUTFBytes("йцукенгшщзхъфывапролджэ\ячсмитьбю.qwertyuiplkjhgfdsazxcvbnm,");
			
			request.data = ba;
			request.method = URLRequestMethod.POST;
			request.contentType = 'application/octet-stream';
			loader = new URLLoader();
			loader.addEventListener(Event.COMPLETE,completeHandler);
			loader.load(request);

		}
		private function completeHandler(event:Event):void {
			trace(loader.data);
		}
	}
}

/*
<?php
	//save-file.php
	$fileData = $GLOBALS[HTTP_RAW_POST_DATA];
	$fileName = ''.$_GET['name'].'.txt';
	$fp = fopen($fileName, "w");
	fwrite($fp,$fileData);
	fclose($fp);
	echo "file write - OK ".$fileName; 
?>
*/

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
image , resize , rotate , upload
Опции темы
Опции просмотра

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

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


 


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


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