2011-03-09 5 views
6

Je veux mettre des restrictions sur les images téléchargées par les utilisateurs, de sorte que le script qui les traite ne manque jamais de mémoire.Comment calculer la mémoire nécessaire pour traiter une image?

Les images qui nécessitent plus de mémoire sont celles qui ont une résolution plus élevée. Ils n'ont pas besoin d'avoir une grande taille en octets. Par exemple, une image de 46 Ko, avec une résolution de 4000 x 2500 et quelques transparents (PNG), a pris environ 90 Mo pour la redimensionner.

Existe-t-il un moyen de précalculer la mémoire nécessaire avec précision?

Des idées?

+1

Je ne connais pas grand-chose à la manipulation d'image, mais la taille de fichier Bitmap non compressée ne serait-elle pas dans la tendance générale? – drudge

+0

Règle générale que j'utilise: horizontal * vertical * 4 juste pour charger l'image en utilisant GD, plus le même calcul pour l'image redimensionnée ... en octets –

Répondre

3

Généralement, la règle générale est, largeur x hauteur x 4 (rgba) pour les images source et de destination, sans oublier la quantité de mémoire que le script a déjà consommée.

+1

Cela ne fonctionne pas. J'ai ceci: (4000 * 2462 + 300 * 185) * 4/1024/1024 = 37.78mb. Le script, sans la partie traitement d'image, prend environ 1mb. Avec le traitement d'image, prend 86,77mb. – HappyDeveloper

+0

C'est curieux, ça a toujours marché pour moi. Pour tester, vous pouvez toujours essayer d'imprimer 'memory_get_usage (true)' avant et après les appels d'image pour vous donner une idée de la quantité utilisée et concevoir votre propre algorithme. – steveo225

+0

Peut-être que la bibliothèque d'images que j'utilise fait quelque chose de stupide. Mais je l'ai testé avec une autre bibliothèque, et la même chose s'est produite. Je suis sûr que cela fonctionne bien si je n'utilise que GD, alors j'accepte votre réponse. – HappyDeveloper

0

En utilisant la bibliothèque GD une fois le fichier téléchargé, vous pouvez utiliser getimagesize(). Vous pouvez ensuite vérifier la hauteur et la largeur pour déterminer si vous souhaitez le traiter ou renvoyer une erreur, il renvoie également le nombre de bits utilisés par couleur si vous souhaitez en tenir compte également. Ainsi, votre validation peut porter sur la taille et les dimensions du fichier.

Questions connexes