Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отправка на сервер png24 с прозрачностью (http://www.flasher.ru/forum/showthread.php?t=176116)

illuzor 02.03.2012 14:06

Отправка на сервер png24 с прозрачностью
 
Приветствую. Есть следующая система:
Через FileReference во флешку загружается изображение, добавляется в displayList, обрезается.
Далее через BitmapData.draw() рисуется обрезанное изображение.
Затем битмапдата перегоняется в ByteArray через PNG24 ecnoder, этот ByteArray кодируется через Base64 и отправляется на сервер.

Проблема в следующем: после приёма изображения сервером в случае, когда должна быть прозрачность, её нет.
Если в конструкторе битмапдаты не задать цвет fillColor, прозрачности нет ни во флеше, ни на сервере.
Если задать этот цвет, то во флеше прозрачность есть, а в файле на сервере её нет.

Возможно ли решить эту проблему?

-De- 02.03.2012 14:20

Раскодируйте из декодера и посмотрите во флэш - есть прозрачность? Если нет - декодер кривой, менять. Раскодируйте из Base64 - есть прозрачность?...

FlashRus 02.03.2012 14:33

Код AS3:

Далее через BitmapData.draw() рисуется обрезанное изображение.

BitmapData.draw() - убиват прозрачность

illuzor 02.03.2012 14:43

Цитата:

Сообщение от -De- (Сообщение 1066674)
Раскодируйте из декодера и посмотрите во флэш - есть прозрачность? Если нет - декодер кривой, менять. Раскодируйте из Base64 - есть прозрачность?...

Проверил то и другое. Прозрачность есть.
Цитата:

Сообщение от FlashRus (Сообщение 1066677)
BitmapData.draw() - убиват прозрачность

Как-то подругому мою задачу решить можно?

BuKT 02.03.2012 14:45

Цитата:

BitmapData.draw() - убиват прозрачность
Не обязательно. При инстанцировании BitmapData третий параметр конструктора должен быть равен true, а четвёртый - 0. При вызове метода draw экземпляра в четвёртый параметр этого метода должно передаваться значение flash.display.BlendMode.ALPHA. Например так
Код AS3:

import flash.display.BlendMode
function drawMe(source:IBitmapDrawable):BitmapData {
  var toReturn:BitmapData = new BitmapData(source.width, source.height, true, 0);
  toReturn.draw(source, null, null, BlendMode.ALPHA);
  return toReturn;
}


illuzor 02.03.2012 14:52

Код AS3:

При инстанцировании BitmapData третий параметр конструктора должен быть равен true, а четвёртый - 0

У меня собственно так и есть. А BlendMode.ALPHA вообще убивает изображение. Отображается только прозрачность и непрозрачность.

Дело в том, что во флеше то всё нормально, а после отправки на сервер прозрачности нет. Может косяк в серверной части?

-De- 02.03.2012 15:01

Попробуйте полученный ByteArray сохранить не загружая на сервер и посмотреть, сохранит ли он нормальный пнг (возможно полученный пнг можно нормально раскодить только этим декодером, т.е. он кривой). Если нет - смотреть на раскодировние у пхп. Вообще попробуйте декодер сменить, в нём что-то не то, по-моему.
BitmapData.draw() - не убиват прозрачность, делает ровно то, что написано, рисует поверх не перерисовывая альфу, а нормально складывая. Если у вас fillColor без прозрачности, то ясен пень потом непрозрачное изображение получится. BlendMode.ALPHA не рисует цвет вообще) Им как раз можно перерисовать альфу.

illuzor 02.03.2012 15:12

Цитата:

можно нормально раскодить только этим декодером
Мне вообще не попадались png раскодировщики. Можно ведь через Loader.loadBytes изображение вытащить. Я использую библиотеку blooddy_crypto

Цитата:

Попробуйте полученный ByteArray сохранить не загружая на сервер и посмотреть, сохранит ли он нормальный пнг
Сохранился нормальный png24 с прозрачностью.

-De- 02.03.2012 15:19

Цитата:

Сообщение от illuzor (Сообщение 1066697)
Сохранился нормальный png24 с прозрачностью.

Отлично, значит передача чудит. Проверяйте цепочку бинарник -> Base64 -> полученный Base64 -> бинарник. От каждого мд5 там посчитать какой надо, какой есть или что. Бинарники должны быть одинаковы.
Может, в пхп файл в текстовом режиме открыли или чо )


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

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