调整动画GIF的大小,同时使用java保持动画

调整动画GIF的大小,同时使用java保持动画,第1张

概述我在java中使用Graphics2D来调整图像大小,它与jpg,png和其他格式完美配合. 我的问题是动画GIF图像,重新调整动画后不见了! 这是我使用的方法: private BufferedImage doResize(int newWidth, int newHeight, double scaleX, double scaleY, BufferedImage source 我在java中使用Graphics2D来调整图像大小,它与jpg,png和其他格式完美配合.
我的问题是动画gif图像,重新调整动画后不见了!

这是我使用的方法:

private BufferedImage doResize(int newWIDth,int newHeight,double scaleX,double scaleY,BufferedImage source) {    GraphicsConfiguration gc = getDefaultConfiguration();    BufferedImage result = gc.createCompatibleImage(newWIDth,newHeight,source.getcolorModel().getTransparency());    Graphics2D g2d = null;    try {        g2d = result.createGraphics();        g2d.setRenderingHint(RenderingHints.KEY_INTERPolATION,RenderingHints.VALUE_INTERPolATION_BICUBIC);        g2d.setRenderingHint(RenderingHints.KEY_INTERPolATION,RenderingHints.VALUE_INTERPolATION_BIliNEAR);        g2d.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUAliTY);        g2d.setRenderingHint(RenderingHints.KEY_ANTIAliASING,RenderingHints.VALUE_ANTIAliAS_ON);        g2d.scale(scaleX,scaleY);        g2d.drawImage(source,null);    } finally {        if (g2d != null) {            g2d.dispose();        }    }    return result;}

所以,任何线索如何在重新调整尺寸后如何保持动画GIF?
谢谢.

解决方法 我找到了两个源,它们在组合时可用于在保持动画的同时调整图像大小.

在这个问题上(
Convert each animated GIF frame to a separate BufferedImage)寻找Alex Orzechowski的答案.他的代码接受一个gif文件并将其转换为ImageFrames数组(这是他创建的包装BufferedImage的类).然后看看这个将BufferedImages序列转换为gif文件的代码
(http://elliot.kroo.net/software/java/GifSequenceWriter/).

你可能猜到,你需要做的就是上传gif,使用Alex的代码将其转换为Imagefiles / BufferedImages数组,使用你的Graphics2D代码调整每个帧的大小(你需要为Alex’s添加一个setimage方法) ImageFrame类),然后使用Elliot的代码将数组转换为gif!这是我的样子:

public static voID main( String[] args ){  try {     file imagefile = new file( "inputfile" );     fileinputStream fiStream = new fileinputStream( imagefile );     ImageFrame[] frames = readGif( fiStream );     for( int i = 0; i < frames.length; i++ ){        //code to resize the image        BufferedImage image = ImageUtilitIEs.resizeImage( frames[ i ].getimage(),newWIDth,newHeight);        frames[ i ].setimage( image );   }     ImageOutputStream output =       new fileImageOutputStream( new file( "Outputfile" ) );     GifSequenceWriter writer =       new GifSequenceWriter( output,frames[0].getimage().getType(),frames[0].getDelay(),true );     writer.writetoSequence( frames[0].getimage() );     for ( int i = 1; i < frames.length; i++ ) {        BufferedImage nextimage = frames[i].getimage();        writer.writetoSequence( nextimage );     }     writer.close();     output.close();  }  catch ( fileNotFoundException e ) {     System.out.println( "file not found" );  }  catch ( IOException e ) {     System.out.println( "IO Exception" );  }}

然而,该代码不考虑具有在帧之间流逝的不同时间量的gif图像.

总结

以上是内存溢出为你收集整理的调整动画GIF的大小,同时使用java保持动画全部内容,希望文章能够帮你解决调整动画GIF的大小,同时使用java保持动画所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1106849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存