Pergunta

Gostaria de enviar imagens criadas dinamicamente para meus usuários, tais como tabelas, gráficos etc. Estas imagens são "jogar fora" imagens, eles serão enviados apenas para um usuário e, em seguida, destruídos, daí o "há arquivos envolvidos ".

Gostaria de enviar a imagem diretamente para o usuário, sem salvá-lo no sistema de arquivos em primeiro lugar. Com PHP isso poderia ser conseguido ligando uma imagem em seus arquivos HTML para um script PHP, tais como:

edit: SO engoliu a minha imagem tag:

<img src="someScript.php?param1=xyz">

O script, em seguida, enviou os cabeçalhos corretos (filetype => jpeg etc) para o navegador e escreveu diretamente a parte de trás para o cliente, sem salvá-lo temporariamente para o sistema de arquivos.

Como eu poderia fazer algo assim com uma aplicação WSGI. Atualmente estou usando o Python SimpleWSGI Server interno. Estou ciente de que este servidor foi destinado principalmente para fins de demonstração e não para uso real, como ela não tem capacidades multi-threading, então por favor não apontar isso para mim, eu estou ciente disso, e por enquanto ele cumpre os meus requisitos: )

É realmente tão simples como colocar o URL para as tags de imagem e processar o pedido com WSGI, ou há uma prática melhor?

Alguém já teve alguma experiência com isso e poderia me dar algumas indicações (há aqueles 32Bit agradar)

Obrigado,

Tom

Foi útil?

Solução

Ele não está relacionado com WSGI ou php ou qualquer outra tecnologia específica web. considerar

<img src="someScript.php?param1=xyz">

em geral para servidor url someScript.php?param1=xyz deve retornar dados de tipo de imagem e ele iria trabalhar

Veja este exemplo:

from wsgiref.simple_server import make_server

def serveImage(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'image/png')]
    start_response(status, headers)

    return open("about.png", "rb").read()

httpd = make_server('', 8000, serveImage)
httpd.serve_forever()

aqui qualquer url apontando para serveImage irá retornar uma imagem válida e você pode usá-lo em qualquer tag img ou qualquer outro local tag onde uma imagem pode ser usada, por exemplo, CSS ou imagens de fundo

Os dados de imagem podem ser gerados em tempo real usando muitos terceiros bibliotecas por exemplo PIL etc por exemplo ver exemplos de imagens geração dinamicamente usando Python Imaging Library http://lost-theory.org/python/dynamicimg.html

Outras dicas

SIM. É tão simples como colocar a url na página.

<img src="url_to_my_application">

E a sua aplicação só tem que devolvê-lo com o mimetype correto, assim como em PHP ou qualquer outra coisa. Mais simples exemplo possível:

def application(environ, start_response):
    data = open('test.jpg', 'rb').read() # simulate entire image on memory
    start_response('200 OK', [('content-type': 'image/jpeg'), 
                              ('content-length', str(len(data)))])
    return [data]

É claro que, se você usar uma biblioteca framework / ajudante, que pode ter funções auxiliares que vão torná-lo mais fácil para você.

Eu gostaria de adicionar como um comentário lado que capacidades multi-threading não são por excelência em um servidor web. Se feito corretamente, você não precisa de fios para ter um bom desempenho.

Se você tem um ciclo de eventos bem desenvolvido que alterna entre diferentes pedidos, e escrever o seu código de manipulação de pedido de uma forma amigável-rosca (retornando o controle para o servidor o mais rápido possível), você pode obter ainda melhor desempenho do que usar tópicos, já que eles não fazem nada de correr mais rápido e adicionar em cima.

twisted.web para uma implementação de servidor web bom python que não usa threads .

Para um exemplo de fantasia que usa essa técnica, consulte a ferrovia BNF diagrama de sopro mini-demonstração . Você pode obter o código fonte a partir do download cheiro wsgi toolkit.

Você deve considerar o uso e prestando atenção aos cabeçalhos ETag. É um script CGI, não WSGI, mas as idéias são traduzíveis: sparklines fonte - lo acontece sempre retornar a mesma imagem para os mesmos parâmetros, por isso pratica caching extremo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top