Estou trabalhando com um elemento de tela com altura de 600
a 1000
pixels e largura de várias dezenas ou centenas de milhares de pixels. No entanto, após um certo número de pixels (obviamente desconhecido), a tela não exibe mais as formas que desenho com JS.
Alguém sabe se existe um limite?
Testado no Chrome 12 e Firefox 4.
javascript
html
canvas
seriousdev
fonte
fonte
tens OR hundreds of thousands
...Respostas:
Atualizado em 13/10/2014
Todos os navegadores testados têm limites para a altura / largura dos elementos da tela, mas muitos navegadores também limitam a área total do elemento da tela. Os limites são os seguintes para os navegadores que posso testar:
Cromada:
Altura / largura máxima: 32.767 pixels
Área máxima: 268.435.456 pixels (por exemplo, 16.384 x 16.384)
Raposa de fogo:
Altura / largura máxima: 32.767 pixels
Área máxima: 472.907.776 pixels (por exemplo, 22.528 x 20.992)
IE:
Altura / largura máxima: 8.192 pixels
Área máxima: N / A
IE Mobile:
Altura / largura máxima: 4.096 pixels
Área máxima: N / A
De outros:
Não consigo testar outros navegadores neste momento. Consulte as outras respostas nesta página para limites adicionais.
Exceder o comprimento / largura / área máxima na maioria dos navegadores torna a tela inutilizável. (Ele irá ignorar todos os comandos de desenho, mesmo na área utilizável.) O IE e o IE Mobile honrarão todos os comandos de desenho dentro do espaço utilizável.
fonte
<canvas>
elementos empilhados e aplicava automaticamente as instruções de desenho ao contexto apropriado.Encontrei erros de falta de memória no Firefox com alturas de tela superiores a 8000, o cromo parece lidar com muito mais, pelo menos até 32000.
EDIT: Depois de executar mais alguns testes, encontrei alguns erros muito estranhos com o Firefox 16.0.2.
Primeiro, parece que obtenho um comportamento diferente da tela na memória (criada em javascript) em oposição à tela declarada em html.
Em segundo lugar, se você não tiver a tag html e o meta charset adequados, a tela pode ser restrita a 8196, caso contrário, você pode ir até 32767.
Terceiro, se você obtiver o contexto 2d da tela e, em seguida, alterar o tamanho da tela, poderá ficar restrito a 8196 também. Simplesmente definir o tamanho da tela antes de pegar o contexto 2d permite que você tenha até 32767 sem obter erros de memória.
Não tenho conseguido obter consistentemente os erros de memória, às vezes é apenas no carregamento da primeira página e, em seguida, as alterações de altura subsequentes funcionam. Este é o arquivo html que estava testando com http://pastebin.com/zK8nZxdE .
fonte
Tamanho máximo da tela do iOS (largura x altura):
testado em março de 2014.
fonte
Para expandir um pouco a resposta de @FredericCharette: De acordo com o guia de conteúdo do safari na seção "Conheça os limites de recursos do iOS":
Portanto, qualquer variação de tamanho de 5242880 (5 x 1024 x 1024) pixels funcionará em dispositivos de memória grande, caso contrário, são 3145728 pixels.
Exemplo para tela de 5 megapixels (largura x altura):
e assim por diante..
As maiores telas SQUARE são ("MiB" = 1024x1024 Bytes):
fonte
Atualização para 2018:
Conforme o tempo passa, as limitações do canvas mudaram. Infelizmente, o que não mudou é o fato de que o navegador ainda não fornece informações sobre as limitações de tamanho da tela por meio da API Canvas.
Para aqueles que procuram determinar programaticamente o tamanho máximo da tela do navegador ou testar o suporte para dimensões personalizadas da tela, verifique o tamanho da tela .
Dos documentos:
Um link de demonstração e resultados de teste estão disponíveis no README , bem como uma seção de problemas conhecidos que aborda o desempenho e as considerações da máquina virtual.
Divulgação completa, sou o autor da biblioteca. Eu o criei em 2014 e recentemente revisitei o código de um novo projeto relacionado ao canvas. Fiquei surpreso ao descobrir a mesma falta de ferramentas disponíveis para detectar limitações de tamanho da tela em 2018, então atualizei o código, lancei-o e espero que ajude outras pessoas que enfrentam problemas semelhantes.
fonte
De acordo com as especificações do w3 , a interface de largura / altura é um longo sem sinal - portanto, de 0 a 4.294.967.295 (se bem me lembro desse número - pode estar um pouco diferente).
EDIT: Estranhamente, diz sem sinal longo, mas o teste mostra apenas um valor longo normal como o máximo: 2147483647. Jsfiddle - 47 funciona, mas até 48 e ele reverte para o padrão.
fonte
Mesmo que a tela permita que você coloque height = 2147483647, quando você começar a desenhar, nada acontecerá
O desenho só acontece quando eu trago a altura de volta para 32.767
fonte
iOS tem limites diferentes.
Usando o simulador iOS 7, consegui demonstrar que o limite é de 5 MB assim:
mas se eu aumentar o tamanho da tela em uma única linha de pixels:
fonte
No PC
- não acho que haja uma restrição, mas sim, você pode obter exceção de memória insuficiente.
Em dispositivos móveis -
Aqui estão as restrições para a tela para dispositivos móveis: -
O tamanho máximo de um elemento de tela é de 3 megapixels para dispositivos com menos de 256 MB de RAM e 5 megapixels para dispositivos com mais ou igual a 256 MB de RAM.
Então, por exemplo - se você deseja oferecer suporte ao hardware mais antigo da Apple, o tamanho da sua tela não pode exceder 2048 × 1464.
Espero que esses recursos ajudem você a se destacar.
fonte
As limitações do Safari (todas as plataformas) são muito menores.
Limitações conhecidas de iOS / Safari
Por exemplo, eu tinha um buffer de tela de 6400x6400px com dados desenhados nele. Rastreando / exportando o conteúdo e testando em outros navegadores, pude ver que tudo estava bem. Mas no Safari, ele pularia o desenho desse buffer específico no meu contexto principal.
fonte
Tentei descobrir o limite de forma programática: definir o tamanho da tela a partir de 35000, diminuindo em 100 até que o tamanho válido seja encontrado. Em cada etapa, escreva o pixel inferior direito e depois o leia. Funciona - com cautela.
A velocidade é aceitável se qualquer largura ou altura é ajustado para um valor baixo (por exemplo, 10-200.) Desta maneira:
get_max_canvas_size('height', 20)
.Mas se chamado sem largura ou altura como
get_max_canvas_size()
, a tela criada é tão grande que ler a cor de UM ÚNICO pixel é muito lento, e no IE causa sérios travamentos.Se esse teste pudesse ser feito de alguma forma sem ler o valor do pixel, a velocidade seria aceitável.
É claro que a maneira mais fácil de detectar o tamanho máximo seria alguma forma nativa de consultar a largura e altura máximas. Mas o Canvas é 'um padrão de vida', então pode ser que venha algum dia.
http://jsfiddle.net/timo2012/tcg6363r/2/ (Cuidado! Seu navegador pode travar!)
fonte
Quando você usa telas WebGL, os navegadores (incluindo os de desktop) impõem limites extras ao tamanho do buffer subjacente. Mesmo se sua tela for grande, por exemplo, 16.000 x 16.000, a maioria dos navegadores renderizará uma imagem menor (digamos 4096x4096) e aumentará sua escala. Isso pode causar pixelização feia, etc.
Eu escrevi um código para determinar o tamanho máximo usando a pesquisa exponencial, se alguém precisar.
determineMaxCanvasSize()
é a função na qual você está interessado.Também em um jsfiddle https://jsfiddle.net/1sh47wfk/1/
fonte
Você pode fragmentá-lo e, em javascript, adicionar automaticamente quantas telas menores forem necessárias e desenhar os elementos na tela apropriada. Você ainda pode ficar sem memória eventualmente, mas o levaria pelo limite de tela única.
fonte
Não sei como detectar o tamanho máximo possível sem itteração, mas você pode detectar se um determinado tamanho de tela funciona preenchendo um pixel e, em seguida, lendo a cor de volta. Se a tela não foi renderizada, a cor que você receber não será compatível. W
código parcial:
fonte