2010-11-05 31 views
9

Existe-t-il une limite de format de fichier à la taille de pixel PNG?Limites de format de fichier en taille de pixel pour les images png?

J'essaie de visualiser une image PNG de 30.000x30.000 pixels avec Firefox, mais j'ai une erreur. L'image s'ouvre correctement dans Preview.app, bien que très lentement. La taille du fichier n'est pas grande, seulement environ 3 MiB (image 1 bit noir/blanc). Je me demande s'il y a une raison technique pour le format de fichier.

+1

Hmm, limite à PNG - liée à l'ordinateur. Limiter à PNG dans Firefox - Superuser. – Will

+0

@ Je pense que c'est lié à l'informatique. J'aimerais savoir s'il y a une limite dans le format de fichier en premier. Maintenant, je peux vérifier par moi-même mais comme il n'y a pas une telle question et je suis un bon gars, je demande et ajoute un peu plus de connaissances à SO. Cela pourrait être, disons, que la norme est une limite de 16K x 16K. J'obtiens l'erreur parce que firefox la respecte et que Preview.app ne le respecte pas. –

+0

le premier est définitivement, le second est une question SuperUser ... Pas de soucis, je n'ai pas voté pour fermer! – Will

Répondre

11

Une implémentation naïve de redimensionnement nécessiterait l'image à soufflés jusqu'à 2,7 Go en taille avant d'être affiché. Ce serait clairement trop grand pour un programme 32 bits normal à gérer.

La spécification PNG ne semble pas imposer de limites à la largeur et à la hauteur d'une image; ce sont des entiers non signés de 4 octets, qui peuvent aller jusqu'à 4294967295. http://www.libpng.org/pub/png/spec/iso/index-object.html#11IHDR

+18

En fait, votre déclaration sur les limites de taille d'image est incorrecte. PNG n'utilise pas techniquement d'entiers non signés 32 bits; il utilise des entiers non-signés de 31 bits complétés avec un bit zéro supplémentaire. Cela a été fait pour prendre en compte les langues qui n'ont pas de type entier non signé. La limite supérieure de la largeur ou de la hauteur de l'image est donc de 2^31-1 ou 2 147 483 647. –

+0

Mes tests sur Windows montrent que FFox utilise l'API DIB, qui a une taille maximale de 4096 x 4096. Cela peut avoir changé avec Windows 10 - mais au moment où vous allez au-delà de ces navigateurs commencent à échouer. Certains peuvent travailler sur Windows, mais échouent sur Linux, etc. –

+0

@JonLennartAasenden qui devrait être une réponse, pas un commentaire. Bon pour vous de faire une distinction entre la limite imposée par la spécification et des limites plus pratiques. –

2

C'est une image étrange, mais je suis sûr qu'il y a une raison pour avoir une telle image énorme.

Je ne peux pas vraiment répondre à la limite de taille, mais je peux trouver un moyen de contourner ce problème. Créez un ensemble de carreaux d'une certaine taille, puis, lorsque l'utilisateur fait défiler, affichez les carreaux en utilisant CSS pour les positionner correctement. Vous pourriez même être en mesure de sortir avec toutes les tuiles à la fois, avec une flopée de plus petites images.

Mais je suis curieux, quelle est l'application qui a besoin d'une telle image énorme affichée sans redimensionnement?

Erick

+0

ok, mais le standard (de facto ou de jure) dit-il? –

+0

Je rends l'espace des paramètres de mandelbrot, voir mon blog. A pris 10 jours de calcul. –

+0

@Stefano: La norme dit que la taille est un entier non signé de 32 bits, donc la limite théorique serait d'environ 4 milliards de pixels (neuf zéros) x et y. Comme mentionné par Mark Ransom, une mise en œuvre simple de PNG nécessiterait presque 3 Go pour rendre votre image de 30k par 30k pixels. Firefox a probablement erré quand il ne pouvait pas allouer assez de mémoire mais je ne suis pas vraiment sûr car je ne sais pas exactement comment firefox rend les PNG. – slebetman