7
votes

redimensionner le GIF animé tout en gardant l'animation à l'aide de Java

J'utilise Graphics2D en Java pour redimensionner des images, cela fonctionne parfaitement avec JPG, PNG et d'autres formats. Mon problème est l'image GIF animée, après avoir ré-dimensionnement, l'animation est partie!

Voici la méthode utilisée par: xxx

donc, tout indices comment puis-je garder sur le gif animé après la ré-dimensionner? Merci.


0 commentaires

4 Réponses :


7
votes

J'ai trouvé deux sources qui, lorsqu'elles sont combinées peuvent être utilisées pour redimensionner l'image tout en gardant l'animation.

sur cette question ( Convertir chaque cadre de gif animé à un tampon tampon séparé ) cherche La réponse de Alex Orzechowski. Son code prend un fichier GIF et le convertit en une gamme de Imagatiques (qui est une classe qu'il a faite qui enveloppe une bufferedimage). Ensuite, regardez ce code qui convertit une séquence de bufferedimages vers un fichier GIF ( http://elliot.kroo.net/software/java/gifensiblewriter/ ).

Comme vous pouvez probablement deviner, tout ce que vous avez à faire est de télécharger le gif, utilisez le code Alex pour la convertir en une matrice de imagesfiles / Bufferedimages, utilisez votre code graphique2D pour redimensionner chaque image (vous aurez besoin de Pour ajouter une méthode Settimage à la classe ImageFrame d'Alex), utilisez le code d'Elliot pour convertir le tableau en gif! Voici à quoi ressemble à la mine: xxx

Ce code ne tient toutefois pas compte des images GIF avec une quantité de temps différente d'écoulement entre les cadres.


3 commentaires

Génial, merci beaucoup. Totalement résolu et je peux redimensionner les gifs et garder l'animation maintenant. La seule note est que vous devriez multiplier les cadres [0] .getDelay () par 10 parce que dans le cadre de GifeSucidence, il divise de 10 (pour régler les millisecondes)


Cela fonctionne bien mais prend environ 200 Mo pour GIF de taille 1MB et 222 cadres. Y a-t-il pourquoi de réduire l'utilisation de la mémoire ??


Merci pour le conseil avec la séquence!



11
votes

Je sais que c'est vieux mais j'ai trouvé une solution, j'utilise Java 8, je ne sais pas si cela fonctionnera avec d'autres versions.

    ImageIcon image = ? (whatever/wherever your gif is)
    int width = 100;
    int height = 100;
    image.setImage(image.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));


2 commentaires

C'est la méthode que j'utilise. Échelle_smooth et échelle_area_averaging sont le même algorithme sous les couvertures, et je peux confirmer que je reçois une sortie d'image vierge si je le nourrissez d'un gif animé. Meilleurs résultats de balance_default dans ce cas. Pour d'autres images, échelle_smooth produit des résultats quelque peu plus agréables.


Excellent conseil, cela fonctionne vraiment. Bien sûr, le lissage serait encore plus souhaitable, mais cela est correct pour obtenir des résultats rapidement.



0
votes

La solution de Jonny Mars n'a pas fonctionné pour moi, car elle traite et génère uniquement la première image du fichier GIF.

Voici ma solution, il conserve l'animation tout en redimensionnement. P>

File f = new File("path of your animated gif");
URL img = f.toURL();
ImageIcon icon = new ImageIcon(img);
//You have to convert it to URL because ImageIO just ruins the animation

int width = 100;
int height = 100;
icon.setImage(icon.getImage().getScaledInstance(width, height,Image.SCALE_DEFAULT));


0 commentaires

0
votes

bufferedimage grumbuffimg = imageo.read (OrignalImage); int type = grappimg.gettype () == 0? Bufferedimage.type_int_argb: grappimg.gettype (); xxx


1 commentaires

Veuillez écrire quelques explications avec votre code et faire l'intention de votre code correctement.