Flex envio de instantâneo sem usar base64ncode
-
20-09-2019 - |
Pergunta
var is:ImageSnapshot = myImagesnapshot;
var str:String = ImageSnapshot.encodeImageAsBase64(is);
A partir de agora, estou enviando meus dados JPEG para o servidor com o código acima.
O problema é que quase dobra o tamanho dos dados.
Existe uma maneira de enviar os dados da imagem diretamente sem usar nenhuma codificação.
Solução 2
Aqui está uma amostra de envio de dados de imagem sem usar Base64:
var myEncoder:JPGEncoder = new JPGEncoder(100);
var byteArray:ByteArray = myEncoder.encode(bitmapData);
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var url:String = "../../default.php";
var saveJPG:URLRequest = new URLRequest(url);
saveJPG.requestHeaders.push(header);
saveJPG.method = URLRequestMethod.POST;
saveJPG.data = byteArray;
No lado do PHP, preciso acessar:
$globalS["HTTP_raw_post_data"]
Outras dicas
Base64 aumenta o tamanho em um terço; portanto, se você realmente tiver cerca de 100% de sobrecarga, terá um problema em outro lugar.
Não olhou para as fontes para bem, mas, a partir da referência, você pode recuperar o dados binários diretamente.
Apenas enfie isso em um UrlRequest e envie por PUBLICAR.
Você pode salvar o instantâneo como JPG ou PNG.
Dê uma olhada em:http://blog.flexexamples.com/2007/12/07/using-the-imagesnapshot-class-to-capure-images-as-jpegs-or-pngs-in-flex-3/