|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2010
Адрес: Москва
Сообщений: 21
|
сохранение gif'ок (или png)на сервере
создаю во флешке изображение, с помощью PNGEncoder (или GIFEncoder) преобразую его в ByteArray. На локальный диск спокойно сохраняется, а на сервере глухо...
var brr:ByteArray = GIFEncoder.encode(bitdata); //bitdata - BitmapData изображения var request:URLRequest=new URLRequest('save.php'); request.contentType="image/gif"; request.data=brr; request.method=URLRequestMethod.POST; var loader:URLLoader = new URLLoader( ); loader.load( request ); loader.addEventListener( Event.COMPLETE, loaderDone ); |
|
|||||
Регистрация: Mar 2007
Сообщений: 545
|
Гугл сразу выдает "убедитесь, что в настройках PHP опция "always_populate_raw_post_data" включена."
Почему просто не задействовать массив $_POST? А вообще алгоритм такой 1. Проверяем на сервере выполняется ли условие if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) если нет ищем причину 2. Смотрим содержимое переменной, если не то, что надо ищем причину |
|
|||||
Регистрация: Sep 2010
Адрес: Москва
Сообщений: 21
|
можно поподробнее про метод $_POST ?
в нете про загрузку файлов на сервер не нахожу ничего кроме как загрузку через браузер, через форму multipart/form-data |
|
|||||
Регистрация: Mar 2007
Сообщений: 545
|
var img:ByteArray = GIFEncoder.encode(bitdata); //bitdata - BitmapData изображения var variables:URLVariables = new URLVariables(); variables.img = img; var request:URLRequest=new URLRequest('save.php'); request.contentType="image/gif"; request.data=variables; request.method=URLRequestMethod.POST; var loader:URLLoader = new URLLoader( ); loader.load( request ); loader.addEventListener( Event.COMPLETE, loaderDone ); |
|
|||||
Регистрация: Sep 2010
Адрес: Москва
Сообщений: 21
|
Спасибо!
|
|
|||||
Регистрация: Sep 2010
Адрес: Москва
Сообщений: 21
|
andrew911, сделал всё, как ты сказал.
Данные флешка отправляет (проверял локальным сохранением), эта строка срабатывает, функция loaderDone выполняется, но на сервере файл не создаётся, а если он есть, то не изменяется. Почему не работает? Помогите пожалуйста. phpinfo() выдаёт: PHP Version 5.2.12 Добавлено через 6 часов 2 минуты сейчас попробовал добавить строки: результат такой: img=%C2%89PNG%0D%0A%1A%0A img = (квадратик от юникода) PNG (квадратик от юникода) т.е. меняется формат данных? как сделать, что б в первом случае (отправляя variables целиком) данные из img были в том же формате? Последний раз редактировалось Reiver; 09.12.2010 в 00:57. |
|
|||||
Регистрация: Mar 2007
Сообщений: 545
|
Выложите исходники.
Чья библиотека GIFEncoder? |
|
|||||
Регистрация: Sep 2010
Адрес: Москва
Сообщений: 21
|
function saveFile (event:MouseEvent):void{ ....... var sour:DisplayObject=tload.content as DisplayObject; // tloader - загрузчик картинки (её возвращает модуль mimetex - посылаешь ему формулу в Техе, он возвращает гиф-картинку) var bitdata:BitmapData=new BitmapData(sour.width,sour.height,true,0x00ffffff); var image:Bitmap=new Bitmap(bitdata); bitdata.draw(sour); var brr:ByteArray=PNGEncoder.encode(bitdata); var variables:URLVariables = new URLVariables(); variables.img=brr; var request:URLRequest=new URLRequest('save.php'); request.contentType="image/png"; request.data=variables; request.method=URLRequestMethod.POST; var loader:URLLoader = new URLLoader( ); loader.load( request ); loader.addEventListener( Event.COMPLETE, loaderDone ) var file:FileReference = new FileReference(); // отправляю тот же массив brr file.save(variables.img,"0.gif"); // на локальное сохранение, и картинка сохраняется ..... } function loaderDone (event:Event):void { trace("ok"); } ; фаил save.php
package { import flash.geom.*; import flash.display.Bitmap; import flash.display.BitmapData; import flash.utils.ByteArray; public class PNGEncoder { public static function encode(img:BitmapData):ByteArray { // Create output byte array var png:ByteArray = new ByteArray(); // Write PNG signature png.writeUnsignedInt(0x89504e47); png.writeUnsignedInt(0x0D0A1A0A); // Build IHDR chunk var IHDR:ByteArray = new ByteArray(); IHDR.writeInt(img.width); IHDR.writeInt(img.height); IHDR.writeUnsignedInt(0x08060000); // 32bit RGBA IHDR.writeByte(0); writeChunk(png,0x49484452,IHDR); // Build IDAT chunk var IDAT:ByteArray= new ByteArray(); for(var i:int=0;i < img.height;i++) { // no filter IDAT.writeByte(0); var p:uint; var j:int; if ( !img.transparent ) { for(j=0;j < img.width;j++) { p = img.getPixel(j,i); IDAT.writeUnsignedInt( uint(((p&0xFFFFFF) << 8)|0xFF)); } } else { for(j=0;j < img.width;j++) { p = img.getPixel32(j,i); IDAT.writeUnsignedInt( uint(((p&0xFFFFFF) << 8)| (p>>>24))); } } } IDAT.compress(); writeChunk(png,0x49444154,IDAT); // Build IEND chunk writeChunk(png,0x49454E44,null); // return PNG return png; } private static var crcTable:Array; private static var crcTableComputed:Boolean = false; private static function writeChunk(png:ByteArray, type:uint, data:ByteArray):void { if (!crcTableComputed) { crcTableComputed = true; crcTable = []; var c:uint; for (var n:uint = 0; n < 256; n++) { c = n; for (var k:uint = 0; k < 8; k++) { if (c & 1) { c = uint(uint(0xedb88320) ^ uint(c >>> 1)); } else { c = uint(c >>> 1); } } crcTable[n] = c; } } var len:uint = 0; if (data != null) { len = data.length; } png.writeUnsignedInt(len); var p:uint = png.position; png.writeUnsignedInt(type); if ( data != null ) { png.writeBytes(data); } var e:uint = png.position; png.position = p; c = 0xffffffff; for (var i:int = 0; i < (e-p); i++) { c = uint(crcTable[ (c ^ png.readUnsignedByte()) & uint(0xff)] ^ uint(c >>> 8)); } c = uint(c^uint(0xffffffff)); png.position = e; png.writeUnsignedInt(c); } } } |
|
|||||
Регистрация: Mar 2007
Сообщений: 545
|
Цитата:
Попробуйте выставить права на папку 755 (или 777 если не поможет) |
|
|||||
Регистрация: Sep 2010
Адрес: Москва
Сообщений: 21
|
права на папку пробовал и 755 и 777, результат тот же.
Для сравнения: на том же сервере, в той же папке (права 755) перезаписываю файл list.xml через xmledit.php
Сразу возникает вопрос: а почему бы тогда такой же не использовать для сохранения картинки? А всё дело в том, что для картинки необходимо ещё передать из флешки имя данного сохраняемого файла... Добавлено через 1 час 57 минут Почитал по форумам, нашёл решения для jpeg (http://www.flasher.ru/forum/showthread.php?t=135894) но в нём нет альфаканала, что мне необходимо позарез. В общем суть вот в чём: данные картинки хранятся в ByteArray, а вот передаются они строкой, в результате чего php и не может понять, что это картинка. в примере с жипегом байтАррей конвертируют в строку ( var jpgStream:ByteArray = jpgEncoder.encode(jpgSource); var jpgEncoded:String = encodeByteArray(jpgStream); ) после чего эту строку передают пхп и там уже декодеруют с помощью стандартного base64_decode. и тогда всё путём. А вот для gif или png есть похожий конвертатор? я пока не могу найти... |
Часовой пояс GMT +4, время: 05:30. |
|
« Предыдущая тема | Следующая тема » |
|
|