7
votes

Devrais-je utiliser une extension PHP pour ImageMagick ou simplement utiliser la fonction EXED () de PHP pour exécuter les commandes du terminal?

Je dois faire les manipulations d'image suivantes pour les images téléchargées par les utilisateurs de mon site:

  1. redimensionner des images (si supérieures à une certaine dimension)
  2. Convertir tous les formats d'image à JPG
  3. Ajoutez une filigrane au bas de toutes les images

    Dois-je utiliser les extensions de magickwand ou d'imagick ou que je puis-je vous en sortir avec l'exécution des commandes de terminal à l'intérieur de la fonction Exec de PHP?

    Y a-t-il une raison pour laquelle les extensions PHP seraient préférées? Ce qui serait plus rapide et meilleur pour la performance (ce site peut avoir beaucoup d'utilisateurs et il y aurait une tonne de traitement d'image à un moment donné)?


2 commentaires

Avec des extensions, vous pouvez déplacer votre code sur un autre système plus facile pour E.G.


Utilisation de EXEC () aura une surcharge plus élevée car vous devez apparaître une coquille, exécuter Imagick et attendre que Imagick charge toutes les bibliothèques partagées dont il a besoin, etc ... en comparaison, en utilisant la version intégrée PHP aura un coût de démarrage unique.


3 Réponses :


1
votes

J'utilise toujours php gd http://php.net/manual/fr/book .Image.php

Vous pouvez accomplir le redimensionnement, la conversion en JPG et le filigrane de vos images. Je sais que votre message dit que vous devez utiliser Magickwand ou Imagick, mais je voulais juste présenter cette option au cas où cela fonctionnerait pour vous.


2 commentaires

GD est une option, mais plus d'un dernier recours si vous me demandez. Mon opinion personnelle de GD est qu'il est lent, de la mémoire consommant et de base. GD ignore également les profils de couleur dans les photos, qui est une faille majeure. Donc, si vous traitez jamais avec des photos professionnelles, restez à l'écart de GD, sauf si vous voulez des photos saturées de couleur (principalement des rouges). Pour la performance, l'utilisation de la mémoire, la réduction du code et la qualité d'image - Imagick Vent la main vers le bas.


J'aimerais également mentionner que les algorithmes d'échelle de l'image de GD laissent un peu à désirer par rapport à l'image Power ImageMagick



9
votes

Vous bénéficierez beaucoup à l'aide des extensions PHP au lieu d'utiliser EXED ou des fonctions similaires. Les extensions intégrées seront plus rapides et utilisent moins de mémoire car vous n'aurez pas à engager de nouveaux processus et à lire la sortie. Les objets d'image seront directement disponibles en PHP au lieu d'avoir à lire la sortie de fichier, ce qui devrait rendre les images plus faciles à utiliser.

Si vous avez un site occupé, la création de nombreux processus pour éditer des images peut commencer à ralentir les choses et à consommer une mémoire supplémentaire.


4 commentaires

Vous voudrez peut-être également inclure un peu comment la plupart des hôtes (partagés) bloquent exec () pour des raisons de sécurité.


Extensions intégrées sera plus rapide et utilisez moins de mémoire Avez-vous des références pour cela? J'aimerais voir des points de repère pour voir si c'est beaucoup plus rapide. Je sais appeler sur le Convert Binary Spawns Un nouveau processus et plus lent que d'utiliser une bibliothèque intégrée, mais je gère un certain nombre de sites occupés qui fonctionnent de cette manière et ils semblent bien résister. J'aimerais savoir à quoi ressemble la surcharge réelle.


Je n'ai pas de repères directs, je n'ai fait que la déclaration basée sur le fait que les processus engendrés consommeront au moins une mémoire, éventuellement beaucoup en fonction de ce qu'ils font. Les extensions PHP doivent être rapides car elles sont compilées dans le binaire PHP et appelez directement des fichiers de bibliothèque pour effectuer leur travail. Dans ce cas particulier, je pense que l'utilisation de la mémoire serait moins parce que l'auteur peut avoir eu Imagemagick manipuler l'image, la sortie à un fichier, qu'il aurait alors à lire dans la mémoire en utilisant PHP pour servir l'image sur le navigateur. .


GD est la "extension" la plus couramment utilisée pour le traitement des images; Et c'est lent et mange une mémoire comme un fou. De manière générale, un binaire exécuté (E.G. ImageMagick) ne fonctionne pas dans la vitesse ou les problèmes de mémoire.



12
votes

J'aimerais faire un contrepoint de la réponse de Drew010. Dans sa réponse, il déclare:

Vous bénéficierez beaucoup à l'aide des extensions PHP au lieu d'utiliser EXED ou des fonctions similaires. Les extensions intégrées seront plus rapides et utiliseront moins mémoire comme vous n'aurez pas à engager de nouveaux processus et à lire la sortie retour

Pour le traitement des images, cela est vrai. Eh bien, je sais qu'un fait appelant à l'imagemagick binaires à l'aide de la fonction EXED (ORD> EXEX () combien frais généraux il y a.

Mais il y a un autre côté de la pièce. Si vous avez incorporé le code ImageMagick en PHP via une extension, chaque demande utilisant PHP prend plus de mémoire si la demande traite une image ou non . Si vous utilisez mod_php , cela devient même plus d'un problème car maintenant chaque demande de votre serveur a les bibliothèques ImageMagick en mémoire même si elle servait un Fichier html!

Cela dépend vraiment. Vous voulez vraiment garder l'empreinte de la mémoire de PHP aussi bas que possible. Si vous traitez un grand nombre de demandes qui nécessitent ImageMagic et que vous utilisez FastCGI ou PHP_FPM , vous verrez probablement un avantage à l'utilisation de ImageMagick intégré. Mais si vous utilisez uniquement des demandes de traitement occasionnelles à l'aide de ImageMagick et / ou à l'aide de MOD_PHP , vous pouvez obtenir beaucoup de meilleures performances ImageMagick via EXEC () .


1 commentaires

C'est parfait!