Le redimensionnement d'images avec Nodejs et Imagemagick
À l'aide de nodejs et imagemagick suis capable de redimensionner une image avant de l'envoyer au navigateur avec ce.
var http = require('http'),
spawn = require('child_process').spawn;
http.createServer(function(req, res) {
var image = 'test.jpg';
var convert = spawn('convert', [image, '-resize', '100x100', '-']);
convert.stdout.pipe(res);
convert.stderr.pipe(process.stderr);
}).listen(8080);
L'image de test est lu à partir du système de fichier, je veux modifier de sorte que l'image de test est une chaîne binaire.
var image = 'some long binray string representing an image.......';
Mon plan est de stocker les chaînes binaires dans Mongodb et de les lire de manière dynamique.
OriginalL'auteur jamjam | 2012-07-22
Vous devez vous connecter pour publier un commentaire.
Puisque vous utilisez
spawn()
d'invoquer la ImageMagick ligne de commandeconvert
, l'approche normale est d'écrire des fichiers intermédiaires pour un répertoire temporaire où ils seront nettoyés immédiatement après usage ou planifié/cron.Si vous voulez éviter d'écrire le fichier à convertir, une option à essayer est de l'encodage base64 vos images et à l'aide de la inline format. Ceci est similaire à la façon dont les images sont codées en HTML e-mails ou des pages web.
REMARQUE: Il y a une limite sur la taille des options de ligne de commande vous pouvez passer .. Imagemagick docs suggèrent de 5000 octets. Base64 les chaînes de caractères sont plus gros que l'original (Wikipedia propose un guide approximatif de 137% de plus) qui pourrait être très limitatif, sauf si vous êtes montrant les vignettes.
Un autre ImageMagick option format est éphémère:
Si vous voulez éviter les I/O en passant tout à fait, vous avez besoin d'une Node.js module qui s'intègre directement une bibliothèque bas niveau comme ImageMagick ou GD plutôt que d'habillage outils de ligne de commande.
OriginalL'auteur Stennie
Prendre un coup d'oeil sur le nœud du module nœud-imagemagick. Il est l'exemple suivant dans le module de la page pour redimensionner l'image et écriture dans un fichier...
Vous pouvez modifier ce code pour effectuer les opérations suivantes...
Ps. N'avez pas à exécuter le code ci-dessus encore. Vais essayer de le faire peu de temps, mais il devrait vous donner une idée de la façon asynchrone de les redimensionner et de diffuser un fichier.
OriginalL'auteur Split Your Infinity
Ce que vous avez essayé jusqu'à présent? Vous pouvez utiliser GridFS pour stocker les données d'image et de récupérer un flux à partir de là.. Ce en C#..ne sais Pas si cela aide..
Vous pouvez maintenant utiliser le flux renvoyé par ShowPhoto.
Soit il y a un moyen de passer d'une chaîne binaire de imagemagick ou vous pouvez écrire ce flux vers un fichier temporaire puis utilisez-le nom du fichier à transmettre à imagemagick..Il n'y a pas de contrainte sur l'utilisation de GridFS..C'est juste bon pour les images. Mais si vos images sont rares et vous avez une collection dédiée à MongoDB en ne stockant que les images binaires, alors tout va bien..l'utilisation normale de documents..Logique reste fondamentalement le même. Au lieu de la base de données.GridFS.FindOne, vous écrivez de la base de données.MyCollection.FindOne.
Le temp, c'est ce que cherche à éviter, voir ce stackoverflow.com/questions/1295618/... . La ligne de fond de ce que je suis en train de faire, c'est possible en PHP.
Maintenant, je crains que je ne comprends pas imagemagick, mais il semble que la réponse dans le lien que vous avez mentionné également crée un temp variable d'image et le détruit.
Oups. J'ai remarqué que. Je vais le temp de route pour l'instant.
OriginalL'auteur Aafreen Sheikh