Créer une image sans la stocker en tant que fichier local
Voici ma situation: je veux créer un redimensionnement de l'image jpeg à partir d'un utilisateur de télécharger l'image, puis de l'envoyer à S3 pour le stockage, mais je suis à la recherche pour éviter d'écrire le redimensionnement jpeg sur le disque, puis de le recharger pour le S3 demande.
Est-il un moyen de le faire entièrement en mémoire, avec les données d'image JPEG formaté, enregistrée dans une variable?
source d'informationauteur MPX | 2008-10-09
Vous devez vous connecter pour publier un commentaire.
La plupart des gens à l'aide de PHP choisir ImageMagick ou Gd2
Je n'ai jamais utilisé Imagemagick; le Gd2 méthode:
Espère que cette aide.
Une fois que vous avez le JPEG en mémoire (en utilisant ImageMagickGDou votre bibliothèque graphique de choix), vous aurez besoin de télécharger l'objet à partir de la mémoire à S3.
De nombreux PHP S3 classes semblent uniquement en charge le téléchargement de fichiers, mais celui à Undesigned semble faire ce que nous sommes après ici -
Si vous êtes à l'aide de GD au lieu de cela, vous pouvez utiliser
imagecreatefromstring à lire une image à partir d'un flux, mais je ne suis pas sûr de savoir si vous pouvez obtenir la taille de l'objet, tel que requis par la
s3->inputResource
ci - getimagesize retourne la hauteur, la largeur, etc, mais pas de la taille de l'image ressource.Cela peut être fait à l'aide de la librairie GD et le tampon de sortie. Je ne sais pas comment efficace, c'est en comparaison avec d'autres méthodes, mais il ne nécessite pas explicite création de fichiers.
Assez tard pour le jeu sur ce point, mais si vous êtes à l'aide de la S3 bibliothèque mentionné par ConroyP et Imagick vous devez utiliser le putObjectString() la méthode la place de putObject() en raison du fait getImageBlob retourne une chaîne de caractères. Exemple qui a finalement fonctionné pour moi:
J'ai eu du mal avec celui-ci un peu, j'espère que ça aide quelqu'un d'autre!
Rends compte que c'est un vieux thread, mais j'ai passé un certain temps à se taper la tête contre le mur sur ce sujet aujourd'hui, et pensé que je pourrais capturer ma solution ici pour le gars à côté.
Cette méthode utilise SDK AWS pour PHP 2 et GD pour l'image resize (Imagick pourrait également être utilisée).
Imagemagick vous permettra de le faire. Il y a beaucoup de PHP wrappers comme cette autour de lui (il y a même exemple de code pour ce que vous voulez faire sur cette page 😉 )
Je rencontre le même problème, à l'aide de openstack magasin d'objets et php-opencloud bibliothèque.
Voici ma solution, qui ne pas utiliser le
ob_start
etob_end_clean
fonction, mais stocker l'image dans la mémoire et dans le fichier temp. La taille de la mémoire et les fichiers temporaires peuvent être adaptées à l'exécution.Sur
php://temp
(à partir de la documentation officielle de php):Maye à l'aide de la Bibliothèque GD.
Il existe une fonction pour copier une partie d'une image et la redimensionner. Bien sûr, la partie pourrait être l'ensemble de l'image, de cette façon, vous ne le redimensionner.
voir imagecopyresampled